Posible duplicado:
¿Cómo puedo contar el número de carpetas en una unidad usando Linux?
Tengo un árbol de directorios realmente profundo en mi caja de Linux. Me gustaría contar todos los archivos en esa ruta, incluidos todos los subdirectorios.
Por ejemplo, dado este árbol de directorios:
/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/
Si paso /home
, me gustaría que devuelva cuatro archivos. O puntos de bonificación si devuelve cuatro archivos y dos directorios. Básicamente, quiero el equivalente de hacer clic con el botón derecho en una carpeta en Windows y seleccionar propiedades y ver cuántos archivos / carpetas hay en esa carpeta.
¿Cómo puedo hacer esto más fácilmente? Tengo una solución que involucra un script de Python que escribí, pero ¿por qué no es tan fácil como ejecutar ls | wc
o similar?
fuente
locate
base de datos está actualizada:locate /some/path | wc -l
(o en mi Mac:)locate -c /some/path
. Pero: esto también contará los archivos/this/other/path/with/some/path
y contará las carpetas en sí.Respuestas:
find . -type f | wc -l
Explicación:
find . -type f
encuentra todos los archivos ( -tipo f ) en este directorio ( . ) Y en todos los subdirectorios, los nombres de los archivos se imprimen en uno estándar por línea.Esto luego se canaliza | into
wc
(word count) la-l
opción le dice a wc que solo cuente líneas de su entrada.Juntos cuentan todos sus archivos.
fuente
find
salida1
Las respuestas anteriores ya responden la pregunta, pero agregaré eso si usa find sin argumentos (excepto la carpeta donde desea que se realice la búsqueda) como en:
la búsqueda va mucho más rápido, casi instantáneo, o al menos lo hace para mí. Esto se debe a que la cláusula type tiene que ejecutar una llamada al sistema stat () en cada nombre para verificar su tipo; omitirlo evita hacerlo.
Esto tiene la diferencia de devolver el recuento de archivos más carpetas en lugar de solo archivos, pero al menos para mí es suficiente, ya que lo uso principalmente para encontrar qué carpetas tienen grandes cantidades de archivos que tardan una eternidad en copiarlos y comprimirlos. Contar carpetas todavía me permite encontrar las carpetas con la mayoría de los archivos, necesito más velocidad que precisión.
fuente
1
Para archivos:
Para directorios:
Ambos trabajan en el directorio de trabajo actual.
fuente
1
Con bash 4+
No es necesario llamar a find dos veces si desea buscar archivos y directorios
fuente
Ligera actualización a la respuesta aceptada, si desea un recuento de directorios y tal
fuente
find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn
(Aquí, el tipo%T
está vacío para un archivo normal, un asterisco para un archivo ejecutable o una barra oblicua para una carpeta; por%HT
lo tanto, se necesita o algún texto adicional para evitar que el espacio no se cuente, como> %T
. )