user4556274 पहले से ही उत्तर है क्यों । मेरा जवाब केवल के लिए अतिरिक्त जानकारी प्रदान करने के लिए कार्य करता है है कि कैसे ठीक से फ़ाइलें गिनती करने के लिए।
यूनिक्स समुदाय में आम सहमति यह है कि आउटपुट को पार्स करना lsएक बहुत ही बुरा विचार है , क्योंकि फ़ाइल नाम में नियंत्रण वर्ण या छिपे हुए वर्ण हो सकते हैं। उदाहरण के लिए, फ़ाइल नाम में एक नए वर्ण के कारण, हमने ls | wc -lबताया कि आउटपुट में 5 पंक्तियाँ हैं ls(जिसमें यह है), लेकिन वास्तव में निर्देशिका में केवल 4 फाइलें हैं।
$> touch FILE$'\n'NAME
$> ls
file1.txt file2.txt file3.txt FILE?NAME
$> ls | wc -l
5
विधि # 1: उपयोगिता खोजें
findआदेश, जो आम तौर पर काम कर रहे फ़ाइल नाम पार्स करने के लिए प्रयोग किया जाता है, हमें यहाँ मुद्रण द्वारा मदद कर सकते हैं आइनोड संख्या । यह एक निर्देशिका या एक फ़ाइल हो, इसमें केवल एक अद्वितीय इनोड संख्या है। इस प्रकार, का उपयोग करते हुए -printf "%i\n"और को छोड़कर .के माध्यम से -not -name "."हम फ़ाइलों का एक सटीक गणना कर सकते हैं। (नोट करें कि -maxdepth 1उप-श्रेणियों में पुनरावर्ती अवरोही को रोकने के लिए उपयोग करें )
$> find -maxdepth 1 -not -name "." -print
./file2.txt
./file1.txt
./FILE?NAME
./file3.txt
$> find -maxdepth 1 -not -name "." -printf "%i\n" | wc -l
4
विधि # 2: ग्लोबस्टार
सरल, त्वरित और अधिकतर पोर्टेबल तरीका:
$ set -- *
$ echo $#
228
setकमांड का उपयोग शेल (जैसे $<INTEGER>चर echo $1) के स्थितीय मापदंडों को सेट करने के लिए किया जाता है । यह अक्सर /bin/shकमी सरणियों की सीमा के आसपास काम करने के लिए उपयोग किया जाता है । एक संस्करण जो अतिरिक्त जांच करता है, वह यूनिक्स और लिनक्स पर गिल के जवाब में पाया जा सकता है ।
गोले का समर्थन करने वाले गोले में, जैसे bash, हम उपयोग कर सकते हैं
items=( dir/* )
echo ${#items[@]}
जैसा कि टिप्पणियों में स्टीलड्राइवर द्वारा प्रस्तावित किया गया था ।
findविधि के समान चाल wcऔर ग्लोबस्टार का उपयोग statप्रति लाइन इनोड संख्या की गणना करने के लिए किया जा सकता है :
$> LC_ALL=C stat ./* --printf "%i\n" | wc -l
4
एक वैकल्पिक दृष्टिकोण forलूप में वाइल्डकार्ड का उपयोग करना है । (ध्यान दें, यह परीक्षण यह परीक्षण करने के लिए एक अलग निर्देशिका का उपयोग करता है कि क्या यह दृष्टिकोण उपनिर्देशिका में उतरता है, जो ऐसा नहीं करता है - 16 मेरे में मदों की सत्यापित संख्या है ~/bin)
$> count=0; for item in ~/bin/* ; do count=$(($count+1)) ; echo $count ; done | tail -n 1
16
विधि # 3: अन्य भाषाओं / दुभाषियों
पायथन समस्याग्रस्त फ़ाइल नाम के साथ मेरे os.listdir()कार्य को दी गई सूची की लंबाई को मुद्रित करने के माध्यम से भी निपट सकता है (जो गैर-पुनरावर्ती है, और केवल तर्क के रूप में दी गई निर्देशिका में आइटम सूचीबद्ध करेगा)।
$> python -c "import os ; print os.listdir('.')"
['file2.txt', 'file1.txt', 'FILE\nNAME', 'file3.txt']
$> python -c "import os ; print(len(os.listdir('.')))"
4
यह भी देखें
ls | wc -lफ़ाइल नाम में एक नई पंक्ति के साथ फ़ाइलें हैं, तो विफल हो जाएगा। यह अधिक लचीला है:find . -mindepth 1 -maxdepth 1 -printf . | wc -c