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.

top-less
fuente

Respuestas:

224

Puede ser algo como

find . -type f | wc -l

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

sagarchalise
fuente
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.

Egil
fuente
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
usuario38537
fuente
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í .

not2qubit
fuente
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.

usuario desconocido
fuente
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
Sriram Murali
fuente
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

Mike Bounds
fuente
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

david
fuente
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
0

Yo iría con esta opción yo mismo:

ls -alR | grep -c ^ -

Charles
fuente
3
Agregue algunos detalles ...
Pierre.Vriens