51 votes

Compter le nombre total de fichiers dans un répertoire particulier avec une extension spécifique

Je veux compter le nombre total de fichiers dans un répertoire particulier qui se termine par l'extension ".mp4".

J'obtiens la commande suivante :

ls -F |grep -v / | wc -l

Il compte tous les fichiers dans un répertoire particulier, mais je veux compter les fichiers qui se terminent par l'extension .mp4.

Existe-t-il une commande Ubuntu pour cela ?

49voto

l0b0 Points 7560

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

34voto

Sam Starling Points 101

Vous pouvez procéder de la manière suivante

ls -lR /path/to/dir/*.jpg | wc -l

Cela vous permet de compter

17voto

squozen Points 171

Celui-ci recherche, trie et liste tous les fichiers par extension et dans l'ordre :

find . -type f | sed 's/.*\.//' | sort | uniq -c

10voto

xiaodongjie Points 2696

Je pense qu'il suffit de suivre 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 -type f comme find comme suit.

$ find . -name "*.mp4" -type f | wc -l
8

En outre, ls -lR peut être utilisé comme find .

3voto

Louis Matthijssen Points 11247

Vous pouvez utiliser ls -1 *.mp4 | wc -l .

Cette opération permet d'obtenir la liste de tous les fichiers se terminant par .mp4 , en imprimant chaque fichier sur une nouvelle ligne ( ls -1 *.mp4 ), et de diriger la sortie vers wc qui comptera le nombre de nouvelles lignes à l'aide de la fonction -l drapeau.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X