น่าเสียดายที่ปัญหาที่ไม่เป็นพิษเป็นภัยนี้แก้ไขได้ยากในลักษณะที่รองรับชื่อไฟล์ทั้งหมดและพกพาได้ นี่คือความปลอดภัย (มันจัดการไฟล์ที่ซ่อนเส้นทางที่มีช่องว่างขีดกลางและแม้กระทั่งการขึ้นบรรทัดใหม่) และเข้ากันได้กับ POSIX :
find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c
ถ้าคุณไม่อยากให้มันเป็น recursive -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