2009-02-13 7 views
7

मैक ओएस एक्स के मूल निवासी केवल टूल का उपयोग करके खाली (शून्य-बाइट) फ़ाइलों को ढूंढने और निकालने का सबसे आसान/सर्वोत्तम तरीका क्या है?खाली (शून्य-बाइट) फ़ाइलों को हटा रहा है

+0

कृपया स्पष्ट! एक फ़ाइल जो खाली है, सभी खाली फाइलें? आपने क्या प्रयास किया है, त्रुटियां कहां हैं? – hop

+0

मेरे उत्तर पर एक टिप्पणी ने प्रश्न स्पष्ट किया; उचित अद्यतन। –

+0

चार्ल्स डफी धन्यवाद। मेरी बुरी अंग्रेजी के लिए खेद है: पी – Bank

उत्तर

15

काफी आसान:

find . -type f -size 0 -exec rm -f '{}' + 

xattr सामग्री (MacOS find कार्यान्वयन कल्पना करते हुए) होने के लिए किसी भी फ़ाइल को अनदेखा करने के लिए:

find . -type f -size 0 '!' -xattr -exec rm -f '{}' + 

कहा यही कारण है, ध्यान दें कि कई xattrs विशेष रूप से उपयोगी नहीं हैं (उदाहरण के लिए, com.apple.quarantine सभी डाउनलोड की गई फ़ाइलों पर मौजूद है)।

+1

-type f अच्छी कॉल – dwc

+0

मैं ढूंढता हूं। -साइज 0 -exec आरएम {} \; लेकिन ऐड-टाइप एफ बेहतर होना चाहिए – Bank

+0

तो, अंग्रेजी में, "वर्तमान निर्देशिका में सभी खाली फ़ाइलों को ढूंढें और उपयोगकर्ता को संकेत दिए बिना हटाएं"? – endolith

1
find /path/to/stuff -empty 

हैं कि फ़ाइलों को आप देख रहे हैं की सूची दी गई है तो आदेश बनाना:

find /path/to/stuff -empty -exec rm {} \; 

सावधान रहें! इसे पूर्ववत करने का कोई तरीका नहीं होगा!

+0

+ से अधिक उपयोग करने के लिए बेहतर; यदि आपके पास वर्तमान खोज है - इस तरह यह पाइपलाइन में होने पर xargs के तरीके से कार्य करता है। –

1

उपयोग:

find . -type f -size 0b -exec rm {} ';' 

अन्य सभी संभव रूपांतरों के साथ सीमित करने के लिए क्या हट जाता है।

8

आप को चलाने के लिए/bin/द्वारा rm कांटे के संभावित बड़ी संख्या को कम कर सकते हैं:

find . -type f -size 0 -print0 | xargs -0 /bin/rm -f 

उपरोक्त आदेश, बहुत पोर्टेबल है बल्कि सिर्फ लिनक्स बक्से से यूनिक्स के सबसे संस्करणों पर चल रहा है, और संस्करणों पर यूनिक्स के दशकों से वापस जा रहा है। लंबी फ़ाइल सूचियों के लिए, कमांड लाइन लंबाई सीमा को ओवरराइज करने से सूची को रखने के लिए कई /bin/rm आदेश निष्पादित किए जा सकते हैं।

एक समान प्रभाव एक find में + का उपयोग कर एक शैली में xargs का सबसे आम उपयोग को बदलने के लिए अभी भी /bin/rm के अलावा अन्य कार्यों के लिए ही उधार देता है, और हाल ही में OSes पर कम लिखकर प्राप्त किया जा सकता। इस मामले में, find अलग-अलग /bin/rm कमांड में वास्तव में लंबी फ़ाइल सूचियों को विभाजित करने में संभाल लेंगे। {} को शैल को कुछ भी करने से रोकने के लिए इसे उद्धृत किया गया है; उद्धरण हमेशा के लिए आवश्यक हैं नहीं लेकिन खोल के हवाले से की पेचीदगियों को भी यहाँ कवर करने के लिए शामिल हैं, इसलिए जब संदेह में, अक्षर लोप में शामिल हैं:

find . -type f -size 0 -exec /bin/rm -f '{}' + 

लिनक्स में, खनन दृष्टिकोण आमतौर पर -delete का उपयोग कर उपलब्ध हैं। ध्यान दें कि हाल ही में find के -delete प्राथमिक को सीधे unlink (2) के साथ लागू किया गया है और यह zillion /bin/rm कमांड, या यहां तक ​​कि xargs और + कुछ भी नहीं करता है। मैक ओएस find में -delete और -empty प्राइमरी भी हैं।

find . -type f -empty -delete 

खाली (और नव खाली कर दिया) फ़ाइलें stomp करने के लिए - निर्देशिका के रूप में अच्छी तरह से - कई आधुनिक लिनक्स मेजबान यह कुशल दृष्टिकोण का उपयोग कर सकते हैं:

find . -empty -delete 
+1

+1 यह बेहतर उत्तर है। –

+1

यह _does_ पोर्टेबिलिटी में सुधार, अनुमोदित - लेकिन 'find -exec ... {} + 'केवल लिनक्स से परे उपलब्ध है। तत्काल बंद, दोनों Solaris 11 और ओएस एक्स खोजने के लिए POSIX विनिर्देश के इस हालिया जोड़े का समर्थन करते हैं (1003.1 के अंक 6 में जोड़ा गया)। –

+0

'+' वाक्यविन्यास कम पोर्टेबल है, लेकिन अभी भी सुंदर पोर्टेबल है। यह निश्चित रूप से कई * पुराने * यूनिक्स पर उपलब्ध नहीं है जो * करते हैं * 'xargs' है। 'xargs'' + 'से भी अधिक लचीला है, हालांकि उस अतिरिक्त फ्लेक्स की आवश्यकता की आवृत्ति वास्तव में कम है। हालांकि, मैं '+' फॉर्म जोड़ दूंगा। –

संबंधित मुद्दे