Thật không may, vấn đề lành tính này rất khó giải quyết theo cách hỗ trợ tất cả các tên tệp và có thể mang theo được. Điều này là an toàn (nó xử lý các tệp ẩn, đường dẫn chứa dấu cách, dấu gạch ngang và thậm chí là dòng mới) và tương thích POSIX :
find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c
Nếu bạn không muốn nó được đệ quy, chỉ cần thêm -maxdepth 1.
Bạn không nên phân tích lsđầu ra.
Kiểm tra:
$ 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
So sánh với câu trả lời được chấp nhận :
$ ls -lR ./*.mp4 | wc -l
3
Hoặc các đề xuất khác:
$ 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 -1xử lý các ký tự dòng mới, trong trường hợp này, hợp lý để phân tíchlsđầu ra. Cái được đánh dấu là sai khi sử dụng cờ -R.