Malheureusement, ce problème bénin est difficile à résoudre d'une manière qui prenne en charge tous les noms de fichiers et qui soit portable. Le présent est sûr (il gère les fichiers cachés, les chemins contenant des espaces, des tirets et même des nouvelles lignes) et compatible avec POSIX :
find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c
Si vous ne voulez pas qu'il soit récursif, ajoutez simplement -maxdepth 1
.
Vous ne devez pas analyser ls
de la production.
Test :
$ 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
Comparer avec la réponse acceptée :
$ ls -lR ./*.mp4 | wc -l
3
Ou d'autres suggestions :
$ 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