web-dev-qa-db-fra.com

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".

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?

28
Prakash V Holkar

Ici tu peux faire comme ça

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

Cela vous donne compter

15
sk1712

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
41
l0b0

Celui-ci trouve, trie et répertorie tous les fichiers par extension dans l'ordre:

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

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 .

5
xiaodongjie

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.

2
Louis Matthijssen

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

0
Dilip Rajkumar

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

0
Mohsin Raza

À Bash, un recours froid à l’utilisation de tableaux avec glob:

$ files=( *.mp4  )
$ echo ${#files[@]}
30
0

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
0
Back.Slash