Cuenta el número total de archivos en un directorio particular con una extensión específica

23

Quiero contar el número total de archivos en el directorio particular que termina con la extensión ".mp4".

Recibo el siguiente comando:

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

Cuenta todos los archivos en un directorio particular, pero quiero el recuento de archivos que finalizan con la extensión .mp4.

¿Hay algún comando de Ubuntu para eso?

    
pregunta Prakash V Holkar 24.04.2014 - 15:48

8 respuestas

11

Aquí puedes hacerlo de esta manera

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

Esto te da cuenta     

respondido por el Shrikant1712 24.04.2014 - 16:03
37

Desafortunadamente, este problema benigno es difícil de resolver de una manera que admite todos los nombres de archivos y es portátil. Esto es seguro (maneja archivos ocultos, rutas que contienen espacios, guiones e incluso nuevas líneas) < strike> y POSIX compatible :

find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c

Si no quieres que sea recursivo, simplemente agrega -maxdepth 1 .

No debe analizar ls output.

Prueba:

$ 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

Compare con la respuesta aceptada :

$ ls -lR ./*.mp4 | wc -l
3

u otras sugerencias:

$ 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
    
respondido por el l0b0 24.04.2014 - 15:52
7

Este encuentra, ordena y lista todos los archivos por extensión en orden:

find . -type f | sed 's/.*\.//' | sort | uniq -c
    
respondido por el squozen 22.03.2016 - 15:23
3

Creo que es muy simple como seguir los comandos.

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

o

$ find . | grep -i ".mp4$" | wc -l
8

Creo que los comandos anteriores calculan el recuento de nombres de archivos y directorios *.mp4

así que sugiero que use la opción -type f como find como sigue.

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

Además, ls -lR se puede usar como find .

    
respondido por el xiaodongjie 24.04.2014 - 15:57
1

Podrías usar ls -1 *.mp4 | wc -l .

Esto mostrará todos los archivos que terminen en .mp4 , imprima cada archivo en una nueva línea ( ls -1 *.mp4 ), canalice la salida a wc , que contará el número de líneas nuevas usando el indicador -l .

    
respondido por el Louis Matthijssen 24.04.2014 - 15:55
0

Esto debería darle la lista de archivos con .mp4

ls /path/to/directory | grep ".mp4$"

Cuando se combina con wc -l te dará cuenta

ls /path/to/directory | grep ".mp4$" | wc -l

si desea que la búsqueda incluya subdirectorios

ls -lR /path/to/directory | grep ".mp4$" | wc -l
    
respondido por el Back.Slash 24.04.2014 - 16:13
0

ls | grep --count \.csv$

Reemplazar (.csv con la extensión que desee)

Explicación: creo que un esquema simple es buscar la lista de archivos y contar la extensión con grep. \. para unir . y $ para que coincida con la extensión al final de la línea. Funciona porque cuando la salida de ls se canaliza, se envía un nombre de archivo por línea, que puede verificar ejecutando:

ls | cat

    
respondido por el Mohsin Raza 22.06.2018 - 18:51
0

En bash, un recurso frío para usar matrices con glob:

$ files=( *.mp4  )
$ echo ${#files[@]}
30
    
respondido por el Sergiy Kolodyazhnyy 22.06.2018 - 20:30

Lea otras preguntas en las etiquetas