यह एक-लाइनर का उपयोग कर जीएनयू 100% नुल फ़ाइलों को खोजने के लिए सबसे कारगर तरीका है find, xargsऔर grep(बाद यह सोचते हैं PCRE समर्थन के साथ बनाया गया है):
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -r0 grep -LP "[^\x00]" --
अन्य प्रदान किए गए उत्तरों की तुलना में इस विधि के लाभ हैं:
- गैर-विरल फाइलें खोज में शामिल हैं।
- गैर-पठनीय फ़ाइलों को
Permission deniedचेतावनी से बचने के लिए grep को पारित नहीं किया जाता है ।
grepकिसी भी गैर-बाइट बाइट को खोजने के बाद फाइलों से डेटा पढ़ना बंद कर देगा ( LC_ALL=Cयह सुनिश्चित करने के लिए उपयोग किया जाता है कि प्रत्येक बाइट को एक चरित्र के रूप में व्याख्या किया गया है )।
- रिक्त फ़ाइलें (शून्य बाइट्स) परिणामों में शामिल नहीं हैं।
- कम
grepप्रक्रिया कुशलतापूर्वक कई फाइलों की जांच करती है।
- नए सिरे से युक्त या शुरू होने वाले रास्तों को
-सही तरीके से संभाला जाता है।
- पायथन / पर्ल की कमी वाले अधिकांश एम्बेडेड सिस्टम पर काम करता है।
पासिंग -Zके लिए विकल्प grepका उपयोग xargs -r0 ...की अनुमति देता है आगे क्रियाओं 100% नुल फ़ाइलों पर किया जा करने के लिए (जैसे: सफाई):
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -0 grep -ZLP "[^\x00]" -- |
xargs -r0 rm --
मैं सिम्बलिंक का पालन करने से बचने के लिए findविकल्पों का उपयोग करने की भी सलाह देता हूं -P, और -xdevफाइलसिस्टम को ट्रेस करने से बचने के लिए (उदाहरण के लिए: दूरस्थ आरोहण, उपकरण के पेड़, बाइंड माउंट, आदि)।
के लिए लाइन अंत चरित्र (रों) अनदेखी , निम्नलिखित संस्करण (हालांकि मुझे नहीं लगता कि इस तरह के एक अच्छा विचार है है) काम करना चाहिए:
find . -type f -size +0 -readable -print0 |
LC_ALL=C xargs -r0 grep -LP "[^\x00\r\n]" --
उन सभी को एक साथ रखना, जिनमें अवांछित फ़ाइलों को हटाने (100% nul / newline वर्ण) शामिल हैं, ताकि उन्हें बैकअप होने से रोका जा सके:
find -P . -xdev -type f -size +0 -readable -print0 |
LC_ALL=C xargs -0 grep -ZLP "[^\x00\r\n]" -- |
xargs -0 rm --
मैं खाली फ़ाइलों (शून्य बाइट्स) सहित अनुशंसा नहीं करता, वे अक्सर बहुत विशिष्ट उद्देश्यों के लिए मौजूद होते हैं ।