मैं कैसे बता सकता हूं कि अजगर में कोई फाइल बाइनरी (गैर-पाठ) है?
मैं अजगर में फाइलों के एक बड़े सेट के माध्यम से खोज कर रहा हूं, और बाइनरी फाइलों में मिलान करता रहा हूं। इससे आउटपुट अविश्वसनीय रूप से गड़बड़ हो जाता है।
मुझे पता है कि मैं उपयोग कर सकता हूं grep -I
, लेकिन मैं उस डेटा के साथ अधिक काम कर रहा हूं जो grep अनुमति देता है।
अतीत में, मैंने सिर्फ वर्णों की तुलना में अधिक खोज की होगी 0x7f
, लेकिन utf8
आधुनिक प्रणालियों पर यह असंभव बना देता है। आदर्श रूप से समाधान तेज होगा, लेकिन कोई भी समाधान करेगा।
grep
बाइनरी फ़ाइलों की पहचान करने के लिए खुद को इस्तेमाल करने वाली रणनीति नीचे दिए गए जॉर्ज ऑर्पिनल द्वारा पोस्ट की गई है । जब तक आप -z
विकल्प सेट नहीं करते हैं , यह "\000"
फ़ाइल में एक अशक्त चरित्र ( ) के लिए स्कैन करेगा । इसके साथ -z
, यह के लिए स्कैन करता है "\200"
। उन इच्छुक और / या संदेहवादी 1126 की लाइन की जांच कर सकते हैं grep.c
। क्षमा करें, मुझे स्रोत कोड वाला कोई वेबपृष्ठ नहीं मिला, लेकिन निश्चित रूप से आप इसे gnu.org या एक distro के माध्यम से प्राप्त कर सकते हैं ।
git diff
और GNU diff
भी एक ही रणनीति का उपयोग करते हैं। मुझे यकीन नहीं है कि अगर यह इतना प्रचलित है क्योंकि यह विकल्प की तुलना में बहुत तेज और आसान है, या यदि यह सिस्टम पर UTF-16 फ़ाइलों की सापेक्ष दुर्लभता के कारण है, जो इन बर्तनों को स्थापित करते हैं।