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 -1
xử 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.