एक निर्देशिका में डुप्लिकेट [डुप्लिकेट] सभी फाइलों की गणना करें


198

संभव डुप्लिकेट:
मैं लिनक्स का उपयोग करके ड्राइव में फ़ोल्डर्स की संख्या कैसे गिन सकता हूं?

मेरे लिनक्स बॉक्स पर वास्तव में एक गहरी निर्देशिका ट्री है। मैं उस पथ की सभी फाइलों को गिनना चाहूंगा, जिसमें सभी उपनिर्देशिकाएं शामिल हैं।

उदाहरण के लिए, यह निर्देशिका ट्री दिया गया:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

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

मैं सबसे आसानी से यह कैसे कर सकता हूं? मेरे पास मेरे द्वारा लिखे गए पायथन लिपि का एक समाधान है, लेकिन यह चलाना ls | wcया इसी तरह आसान क्यों नहीं है ?


ठीक नहीं है कि आप क्या देख रहे हैं, लेकिन एक बहुत जल्दी भव्य कुल प्राप्त करने के लिए, यदि आपका locateडेटाबेस अद्यतित है: locate /some/path | wc -l(या मेरे मैक पर locate -c /some/path) : लेकिन: यह फ़ाइलों को भी गिनेगा /this/other/path/with/some/path, और फ़ोल्डरों की गणना खुद करेगा।
अर्जन

वैसे, यह एक अलग, लेकिन निकट से संबंधित समस्या है (एक ड्राइव पर सभी निर्देशिकाओं की गिनती) और समाधान: superuser.com/questions/129088/…
अमांडा

जवाबों:


340

find . -type f | wc -l

स्पष्टीकरण: इस ( ) निर्देशिका में
find . -type fसभी फ़ाइलों ( -type f ) को ढूँढता है और सभी उप निर्देशिकाओं में, फ़ाइल नाम फिर प्रति पंक्ति एक मानक के लिए मुद्रित किया जाता है।

यह तो पाइप किया जाता है | में wc(शब्द गणना) -lविकल्प WC केवल अपने इनपुट की तर्ज गिनती करने के लिए कहता है।

साथ में वे आपकी सभी फाइलों को गिनते हैं।


1
यह ऑफ-बाय-वन एरर से निपटने की वजह नहीं है क्योंकि findआउटपुट से आखिरी न्यूलाइन है
रॉबर्ट

केवल निर्देशिकाओं की गिनती के लिए,
-type

1
जब कोई फाइल नहीं मिलती है, तो इसका नतीजा है1
Dylanthepiguy

47

उपरोक्त उत्तर पहले से ही प्रश्न का उत्तर देते हैं, लेकिन मैं यह जोड़ूंगा कि यदि आप बिना तर्क के पाते हैं (उस फ़ोल्डर को छोड़कर जहां आप खोज करना चाहते हैं):

find . | wc -l

खोज बहुत तेज़, लगभग तात्कालिक, या कम से कम यह मेरे लिए करता है। ऐसा इसलिए है क्योंकि टाइप क्लॉज को अपने प्रकार की जांच करने के लिए प्रत्येक नाम पर एक स्टेट () सिस्टम कॉल चलाना पड़ता है - इसे छोड़ने से ऐसा करने से बचा जाता है।

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


1
जब कोई फाइल नहीं मिलती है, तो इसका नतीजा है1
Dylanthepiguy

25

फ़ाइलों के लिए:

find -type f | wc -l

निर्देशिका के लिए:

find -mindepth 1 -type d | wc -l

वे दोनों वर्तमान कार्य निर्देशिका में काम करते हैं।


1
जब कोई फाइल नहीं मिलती है, तो इसका नतीजा है1
Dylanthepiguy

8

बैश 4+ के साथ

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    ((d++))
  elif [ -f "$file" ];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

यदि आप फ़ाइलों और निर्देशिकाओं को खोजना चाहते हैं, तो दो बार कॉल करने की आवश्यकता नहीं है


8

स्वीकार किए जाते हैं जवाब के लिए थोड़ा अद्यतन, यदि आप dirs और इस तरह की एक गिनती चाहते हैं

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn

1
पर एक मैक / बीएसडी : find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn(यहाँ, प्रकार %Tएक नियमित रूप से फ़ाइल, एक निष्पादन योग्य फ़ाइल या फ़ोल्डर के लिए एक स्लेश के लिए एक तारक के लिए खाली है, इसलिए %HTजरूरत है, या कुछ अतिरिक्त पाठ अंतरिक्ष में नहीं गिना जा रहा है, जैसे से बचने के लिए > %T। )
अर्जन

मुझे मेरे "10.13.6 मैक" पर अवैध विकल्प - ई "देता है
के-माइकल ऐ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.