Je veux compter le nombre total de fichiers dans un répertoire particulier qui se termine par l'extension ".mp4".
Je reçois la commande suivante:
ls -F |grep -v / | wc -l
Il compte tous les fichiers dans un répertoire particulier, mais je veux le nombre de fichiers qui se terminent par une extension .mp4.
Existe-t-il une commande Ubuntu pour cela?
Ici tu peux faire comme ça
ls -lR /path/to/dir/*.jpg | wc -l
Cela vous donne compter
Malheureusement, ce problème bénin est difficile à résoudre d’une manière qui prend en charge tous les noms de fichiers et est portable. This est sans danger (il gère les fichiers cachés, les chemins contenant des espaces, des tirets et même des nouvelles lignes) et compatible POSIX:
find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c
Si vous ne voulez pas que ce soit récursif, ajoutez simplement -maxdepth 1
.
Vous ne devez pas analyser la sortie de ls
.
Tester:
$ 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
Comparez 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
Celui-ci trouve, trie et répertorie tous les fichiers par extension dans l'ordre:
find . -type f | sed 's/.*\.//' | sort | uniq -c
Je pense que c'est très simple en suivant les commandes.
$ find . -name "*.mp4" | wc -l
8
ou
$ find . | grep -i ".mp4$" | wc -l
8
Je pense que les commandes ci-dessus calculent le nombre de noms de fichiers et de répertoires *.mp4
je vous suggère donc d'utiliser l'option -type f
en tant que paramètre find
comme suit.
$ find . -name "*.mp4" -type f | wc -l
8
De plus, ls -lR
peut être utilisé comme find .
Vous pouvez utiliser ls -1 *.mp4 | wc -l
.
Ceci listera tous les fichiers se terminant par .mp4
, en imprimant chaque fichier sur une nouvelle ligne (ls -1 *.mp4
), conduira la sortie à wc
qui comptera le nombre de nouvelles lignes en utilisant le drapeau -l
.
Vérifiez ce lien, cela donne une bonne réponse et une bonne explication,
https://www.2daygeek.com/how-to-count-files-by-extension-in-linux/
# find . -type f | sed -n 's/..*\.//p' | sort | uniq -c
ls | grep --count \.csv$
Remplacer (.csv avec l'extension souhaitée)
Explication: Je pense qu'un schéma simple consiste à récupérer la liste de fichiers et à compter l'extension avec grep. \.
pour correspondre à .
et $
pour correspondre à l'extension en fin de ligne. Cela fonctionne parce que lorsque la sortie de ls est redirigée, un nom de fichier est envoyé par ligne, ce que vous pouvez vérifier en exécutant:
ls | cat
À Bash, un recours froid à l’utilisation de tableaux avec glob:
$ files=( *.mp4 )
$ echo ${#files[@]}
30
Cela devrait vous donner la liste des fichiers avec .mp4
ls /path/to/directory | grep ".mp4$"
Lorsqu'il est combiné avec wc -l
vous donnera le compte
ls /path/to/directory | grep ".mp4$" | wc -l
si vous voulez que la recherche inclue des sous-répertoires
ls -lR /path/to/directory | grep ".mp4$" | wc -l