Pregunta Cuenta recursivamente todos los archivos en un directorio [duplicado]


Posible duplicado:
¿Cómo puedo contar la cantidad de carpetas en una unidad usando Linux? 

Tengo un árbol de directorios muy profundo en mi cuadro 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 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 correr? ls | wc ¿o similar?


165


origen


No es exactamente lo que está buscando, sino obtener un gran total muy rápido, Si tu locate la 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 en /this/other/path/with/some/pathy contará las carpetas ellos mismos. - Arjan
Por cierto, este es un problema diferente, pero estrechamente relacionado (contando todos los directorios en una unidad) y solución: superuser.com/questions/129088/... - Amanda


Respuestas:


find . -type f | wc -l

Explicación:
find . -type f encuentra todos los archivos ( tipo f ) en esto ( . ) directorio y en todos los subdirectorios, los nombres de archivo se imprimen a la salida estándar uno por línea.

Esto luego se canaliza | dentro wc (conteo de palabras) -l la opción le dice a wc que solo cuente las líneas de su entrada.

Juntos cuentan todos tus archivos.


289





Las respuestas anteriores ya responden a la pregunta, pero agregaré que si usas find sin argumentos (excepto la carpeta donde quieres que suceda la búsqueda) como en:

find . | wc -l

la búsqueda es mucho más rápida, casi instantánea, o al menos lo es para mí. Esto se debe a que la cláusula tipo 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 la 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.


42





Para archivos:

find -type f | wc -l

Para directorios:

find -mindepth 1 -type d | wc -l

Ambos trabajan en el directorio de trabajo actual.


24





Con bash 4+

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    ((d++))
  elif [ -f "$file" ];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

No es necesario llamar a buscar dos veces si desea buscar archivos y directorios


8





Ligera actualización de la respuesta aceptada, si desea un conteo de directorios y tal

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn

7



En una Mac / BSD: find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn (Aquí, escribe %T está vacío para un archivo normal, un asterisco para un archivo ejecutable o una barra para una carpeta; por lo tanto %HT es necesario, o algún texto adicional para evitar que no se cuente el espacio, como > %T.) - Arjan