2013-01-24 32 views
5

मैं अपनी लिनक्स मशीन पर फ़ाइल एक्सटेंशन बाधा के बिना मानव-पठनीय फ़ाइलों को ढूंढना चाहता हूं। उन फ़ाइलों को मानव संवेदन फाइलों जैसे टेक्स्ट, कॉन्फ़िगरेशन, एचटीएमएल, स्रोत कोड आदि फाइलों का होना चाहिए। क्या आप फ़िल्टर करने और ढूंढने का एक तरीका सुझा सकते हैं।यूनिक्स पर मानव-पठनीय फ़ाइलों को ढूंढना

+1

फ़ाइल में सामग्री के प्रकार को निर्धारित करने में 'फ़ाइल' उपयोगिता बहुत अच्छी है। शायद आप इसका उपयोग कर सकते हैं और इसके आउटपुट के आधार पर फाइलों को फ़िल्टर कर सकते हैं। – cdhowie

+0

AFAIK केवल विंडोज ट्रस्ट फ़ाइल एक्सटेंशन पर विश्वास करता है। यूनिक्स जैसे ओएस 'फ़ाइल' का उपयोग करते हैं। वैसे भी, आपको "मानव पठनीय" को परिभाषित करना होगा। – m0skit0

+0

यह कितना सटीक होना चाहिए? और क्या आप सिस्टम में हर फाइल की तलाश में हैं, या सिर्फ सिस्टम के चुने हुए हिस्से में? क्या होगा अगर सिस्टम में संलग्न टैक्सबाइट डिस्क की संख्या है, तो क्या यह कई घंटों तक प्रतीक्षा करने के लिए स्वीकार्य है (क्योंकि यह वास्तव में सभी फ़ाइलों को पढ़ने में कितना समय लगता है)? –

उत्तर

6

खोजें और फ़ाइल अपने मित्रों को यहां हैं:

find /dir/to/search -type f -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print 

इस किसी भी फाइल मिलेगा (नोट: यह नहीं सिमलिंक निर्देशिका सॉकेट आदि केवल नियमित रूप से फ़ाइलें मिलेगा)// dir में करने के लिए/खोज और रन श - सी 'फाइल-बी {} | grep पाठ &>/dev/null '\; जो फ़ाइल के प्रकार को देखता है और विवरण में पाठ की तलाश करता है। अगर यह सच हो जाता है (यानी पाठ लाइन में है) तो यह फ़ाइल नाम प्रिंट करता है।

नोट: फ़ाइल नामों के लिए -b ध्वज का उपयोग करके फ़ाइल नाम मुद्रित नहीं किया गया है और इसलिए grep के साथ कोई समस्या नहीं बना सकती है। उदाहरण के लिए -b ध्वज के बिना बाइनरी फ़ाइल गेटटेक्स्ट को गलत रूप से टेक्स्टफाइल के रूप में पहचाना जाएगा।

जैसे

[email protected]# find /bin -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print 
/bin/gunzip 
/bin/svnshell.sh 
/bin/unicode_stop 
/bin/unicode_start 
/bin/zcat 
/bin/redhat_lsb_init 
[email protected]# find /bin -type f -name *text* 
/bin/gettext 

संपादित करें:

आप कंप्रेस फ़ाइलों में देखना चाहते हैं दायर करने के लिए --uncompress ध्वज का उपयोग करें। देख man file

+0

मैं यूनिक्स जैसी पारिस्थितिकी तंत्र में नया हूं। आप अपने 'grep' के अंत में "&" का उपयोग क्यों कर रहे हैं? मेरी समझ यह है कि यह grep को अतुल्यकालिक रूप से चलाएगा। क्या यह अभी भी 'ढूंढ' के लिए बाहर निकलने की स्थिति देगा? ऐसा क्यों करेगा? जवाब देने के लिए समय लेने के लिए धन्यवाद। –

10

कैसे

के बारे में

find /dir/to/search -type f | xargs file | grep text

find आप फ़ाइलों की एक सूची दे देंगे फाइल करने के लिए और अधिक जानकारी और झंडे के लिए।

xargs file पाइप इनपुट से प्रत्येक पंक्ति पर file कमांड चलाएगा।

+0

सही काम करता है!अच्छा समाधान – fuuman

-1

मैं

file directory/to/search/* 

का उपयोग उदाहरण के लिए नाम वाली निर्देशिका के घर में इस्तेमाल में केवल मानव पठनीय फ़ाइलें ढूंढने के लिए: इस तरह के ASCII पाठ के रूप

file home/* 

और पठनीय फ़ाइल एक प्रारूप होगा

+0

यह फ़ाइल प्रकारों को मैन्युअल रूप से स्कैन करने के अलावा फ़ाइल के लिए फ़िल्टर करने की विधि प्रदान नहीं करता है। – blissfool