फ़ाइलों सहित एक विशिष्ट निर्देशिका में सभी खाली फ़ाइलों और फ़ोल्डरों को कैसे खोजें जो सिर्फ खाली दिखते हैं लेकिन नहीं हैं?


18

मान लीजिए कि मेरे फ़ोल्डर में मेरे ~/listपास अपने सब-फ़ोल्डर्स और सब-सब-फ़ोल्डर्स आदि के साथ बड़ी मात्रा में फ़ोल्डर्स हैं, और प्रत्येक स्तर पर लगभग बहुत सारी फाइलें हैं। हालाँकि, इनमें से कुछ फाइलें और फोल्डर खाली हैं, तो मैं कैसे उन सभी के माध्यम से खाली फाइलों और फ़ोल्डरों को खोजने के लिए पुन: खोज कर सकता हूं? और फिर उन्हें फ़ाइल स्थानों की एक सूची में प्रदर्शित किया है ताकि मुझे पता चले कि प्रत्येक कहाँ है (यह भी स्पष्ट होना चाहिए कि कौन सी फ़ाइल है और कौन सा फ़ोल्डर है क्योंकि सभी फ़ाइलों में फ़ाइल एक्सटेंशन नहीं हैं)। मैं गनोम 3.18 के साथ उबंटू GNOME 15.10 चला रहा हूं।

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


1
एक खाली फ़ाइल, एक फ़ाइल है जिसमें कोई वर्ण नहीं है? (रिक्त स्थान, लाइनब्रेक और टैब हो सकते हैं)?
जैकब व्लिजम

@JacobVlijm: ठीक है, पहले मैं सिर्फ फाइलों को सोच रहा था, जो 0 बाइट्स हैं, लेकिन अब जब आप इसका उल्लेख करते हैं, तो कोई मुझे पागल कर सकता है, जो मुझे स्पेस या लाइनब्रेक या कुछ और के साथ एक फाइल दे सकता है, इसलिए मैं उन लोगों का भी पता लगाना चाहूंगा, लेकिन मैं आउटपुट के लिए एक वास्तविक खाली फ़ाइल के बीच अंतर करना चाहूंगा, और एक जो सिर्फ खाली दिखता है।

जवाबों:


25

से man find

    -empty File is empty and is either a regular file or a directory.

तो दोनों खाली फ़ाइलों और निर्देशिकाओं को खोजने के लिए यह करना पर्याप्त है

find ~/lists -empty

प्रकार को इंगित करने के लिए, आप %yआउटपुट स्वरूप विनिर्देशक का उपयोग कर सकते हैं

          %y     File's type (like in ls -l), U=unknown type (shouldn't happen)

जैसे

find ~/lists -empty -printf '%y %p\n'

या जैसे बाहरी प्रोग्राम का उपयोग करें ls, जिसमें एक --classifyविकल्प शामिल है

    -F, --classify
          append indicator (one of */=>@|) to entries

अर्थात

find ~/lists -empty -exec ls -Fd {} \;

यदि 'खाली' की आपकी परिभाषा का विस्तार केवल व्हाट्सएप पात्रों वाली फ़ाइलों को शामिल करने के लिए किया जाता है, तो यह अधिक जटिल हो जाता है - और अधिक कम्प्यूटेशनल रूप से गहन, क्योंकि अब आपको वास्तव में कम से कम किसी भी गैर-रिक्त फ़ाइलों को खोलने और उनकी सामग्री की जांच करने की आवश्यकता है। सबसे कारगर तरीका मैं सोच सकता हूं कि मेरे सिर के ऊपर से कुछ ऐसा होगा

find ~/list \( -empty -o \( -type f -a ! -exec grep -qm1 '[^[:blank:]]' {} \; \) \) -exec ls -Fd {} \;

(या तो खाली है, या एक फ़ाइल और grep कम से कम एक गैर-रिक्त वर्ण का पता नहीं लगाता है)। हालांकि वहाँ एक बेहतर तरीका है।


क्षमा करें, मुझे कुछ याद आया, कृपया मेरे प्रश्न के संपादित संस्करण को देखें। इसे जोड़ना बहुत ज्यादा नहीं होना चाहिए

11

से ~/listफ़ोल्डर:

find . -empty -type d

खाली निर्देशिका और लिस्टिंग के लिए

find . -empty -type f

खाली फाइलों को सूचीबद्ध करने के लिए।

find . -type f -exec bash -c 'if [ `cat "{}" |wc -w` -eq 0 ]; then echo "file - {}";fi' \; -or -empty -exec bash -c "echo dir - {}" \; 

व्हाट्सएप और खाली लाइनों सहित खाली फोल्डर और फाइलों को सूचीबद्ध करने के लिए


और क्या यह पुन: उप-फ़ोल्डर्स और उनकी सामग्री को भी सूचीबद्ध करेगा?

यह बार-बार खाली फाइलों और फ़ोल्डरों को दिखाएगा
एडिड

क्षमा करें, मुझे कुछ याद आया, कृपया मेरे प्रश्न के संपादित संस्करण को देखें। इसे जोड़ना बहुत ज्यादा नहीं होना चाहिए

[ `grep -c [[:alnum:]] "{}"` -eq 0 ][A-Za-z0-9]सेट में केवल वर्णों वाली फ़ाइलों के माध्यम से जाने देंगे ।
कोस

@kos - शायद ग्राफ बदलेगा अलनम काम करेगा
EdiD
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.