Encuentra el número de archivos en la carpeta y subcarpetas?


143

Quiero encontrar el recuento total de la cantidad de archivos en una carpeta y todas sus subcarpetas.

Respuestas:


224

Puede ser algo como

find . -type f | wc -l

Haría el truco. Pruebe el comando desde la carpeta principal.


3
La solución fallará en los archivos cuyos nombres contienen una nueva línea.
usuario desconocido

2
@usuario desconocido:find . -type f -ls | wc -l
organice el

1
aún más rápido:find . -type f -print0 | tr -d -c '\0' | wc -c
organice el

13
@arrange: aún más rápido: find . -type f -printf . | wc -c- adopto la impresión para mi solución en lugar de mi eco -exec.
usuario desconocido el

1
este comando funcionó de
maravilla

27

Usa el treecomando. Es posible que deba instalar el treepaquete.

Enumerará todos los archivos y carpetas en la carpeta dada y un resumen al final.


14

Para contar archivos (incluso archivos sin una extensión) en la raíz del directorio actual, use:

ls -l | grep ^- | wc -l

Para contar archivos (incluso archivos sin extensión) de forma recursiva desde la raíz del directorio actual, use:

ls -lR | grep ^- | wc -l

1
Esos no contarán los archivos ocultos.
usuario desconocido

Cierto. Estoy más inclinado a aceptar y usar su respuesta como la solución.
user38537

13

La forma más rápida y fácil es usarla tree. Su velocidad está limitada por su terminal de salida, por lo que si canaliza el resultado tail -1, obtendrá un resultado inmediato. También puede controlar a qué nivel de directorio le gustan los resultados, utilizando la -Lopción Para salida coloreada, use -C. Por ejemplo:

$ tree share/some/directory/ | tail -1
558 directories, 853 files

$ tree -L 2 share/some/directory/ | tail -1
120 directories, 3 files

Si aún no está allí, puede obtenerlo aquí .


9
find -type f -printf . | wc -c

No cuente las líneas de salida de find, porque los nombres de archivo, que contienen 99 líneas nuevas, contarán como 100 archivos.


44
Los nombres de archivo que contienen nuevas líneas son un caso marginal increíblemente raro.
DisgruntledGoat

8
@DisgruntledGoat: Entonces, un error será extremadamente difícil de encontrar.
usuario desconocido

Me gusta un buen caso, especialmente muchos años después.
user38537

3

Use este comando para cada carpeta en la ruta

for D in *; do echo $D; find $D -type f| wc -l; done

1

find parece ser más rápido que el árbol, por lo que utilicé a continuación para contar archivos en cada directorio del directorio de trabajo actual (ignorando los archivos en CWD) permitiendo que los directorios tengan espacios:

ls -d */ | while read dir_line do echo -n "$dir_line :" find "$dir_line" -type f | wc -l done


Analizar la salida de lses una muy mala idea.
souravc

Gran código, ¿cómo puedo organizar las líneas de salida en un recuento creciente o decreciente de archivos
Nightcrawler

0

Puedes usar find . | wc -l

find .enumerará todos los archivos y carpetas y sus contenidos comenzando en su carpeta actual.
wc -lcuenta los resultados de find


Esta solución también cuenta las carpetas, di la marca porque coincidía con mi ocasión en la que no quería contarlas :)
topless

La solución fallará en los archivos cuyos nombres contienen una nueva línea.
usuario desconocido

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.