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


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

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

उदाहरण के लिए, इस निर्देशिका पेड़ दिया गया है:

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

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

मैं इसे आसानी से कैसे कर सकता हूं? मेरे पास एक पायथन लिपि शामिल है जिसमें मैंने लिखा है, लेकिन यह दौड़ना जितना आसान नहीं है ls | wc या इसी के समान?


170
2017-10-12 21:41


मूल


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


जवाब:


find . -type f | wc -l

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

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

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


293
2017-10-12 21:44





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

find . | wc -l

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

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


45
2018-03-28 22:00





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

find -type f | wc -l

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

find -mindepth 1 -type d | wc -l

वे दोनों मौजूदा कामकाजी निर्देशिका में काम करते हैं।


25
2017-10-12 21:56





बैश 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
2017-10-13 01:58





स्वीकार्य उत्तर के लिए थोड़ा अद्यतन, यदि आप डीआईआर की गिनती चाहते हैं और ऐसे में

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

7
2017-10-13 14:26



पर एक मैक / बीएसडी: find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn (यहां, टाइप करें %T एक नियमित फ़ाइल के लिए खाली है, एक निष्पादन योग्य फ़ाइल के लिए तारांकन, या फ़ोल्डर के लिए एक स्लैश; इसलिये %HT अंतरिक्ष की आवश्यकता से बचने के लिए, या कुछ अतिरिक्त पाठ की आवश्यकता नहीं है, जैसे > %T।) - Arjan
मुझे मेरे 10.13.6 मैक पर "ढूंढें: अवैध विकल्प - ई" देता है - K.-Michael Aye