दुर्भाग्य से यह सौम्य समस्या एक तरह से हल करना मुश्किल है जो सभी फ़ाइल नामों का समर्थन करती है और पोर्टेबल है। यह सुरक्षित है (यह छिपी हुई फ़ाइलें, रिक्त स्थान वाले मार्ग, डैश और यहां तक कि नए सिरे से संभालता है) और POSIX संगत :
find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c
यदि आप इसे पुनरावर्ती नहीं चाहते हैं, तो बस जोड़ दें -maxdepth 1
।
आपको ls
आउटपुट पार्स नहीं करना चाहिए ।
परीक्षा:
$ cd -- "$(mktemp -d)"
$ touch -- -foo.mp4 .bar.mp4 .bat.mp4 'baz.mp4
> ban.mp4'
$ find . -mindepth 1 -type f -name "*.mp4" -exec printf x \; | wc -c
4
स्वीकृत उत्तर की तुलना करें :
$ ls -lR ./*.mp4 | wc -l
3
या अन्य सुझाव:
$ find . -name "*.mp4" | wc -l
5
$ ls -1 *.mp4 | wc -l
ls: invalid option -- '.'
Try 'ls --help' for more information.
0
$ find . -name "*.mp4" | wc -c # Answer fixed at a later time
51
$ find . -name "*.mp4" | wc -l
5
$ find . | grep -i ".mp4$" | wc -l
5
$ ls . | grep ".mp4$" | wc -l
3
ls -1
न्यूलाइन वर्णों की हैंडलिंग, इस मामले में,ls
आउटपुट को पार्स करने के लिए समझदार है । चिह्नित -R ध्वज के उपयोग के लिए एक गलत है।