2010-10-12 21:41:12 +0000 2010-10-12 21:41:12 +0000
217
217

Contar recurrentemente todos los archivos de un directorio

Posible Duplicado: ¿Cómo puedo contar el número de carpetas en un disco usando Linux?

Tengo un árbol de directorios muy profundo en mi caja de Linux. Me gustaría contar todos los archivos en esa ruta, incluyendo todos los subdirectorios.

Por ejemplo, dado este árbol de directorios:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

Si paso por /home, me gustaría que me devolviera cuatro archivos. O, puntos extra si devuelve cuatro archivos y dos directorios. Básicamente, quiero el equivalente a hacer clic con el botón derecho del ratón en una carpeta de Windows y seleccionar propiedades y ver cuántos archivos/carpetas contiene esa carpeta.

¿Cómo puedo hacer esto más fácilmente? Tengo una solución que involucra un script Python que escribí, pero ¿por qué no es tan fácil como ejecutar ls | wc o similar?

Respuestas (5)

364
364
364
2010-10-12 21:44:53 +0000

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 para estandarizar uno por línea.

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

Juntos cuentan todos sus archivos.

49
49
49
2011-03-28 22:00:38 +0000

Las respuestas anteriores ya responden a la pregunta, pero añadiré que si se utiliza la búsqueda sin argumentos (excepto la carpeta en la que se quiere que se realice la búsqueda) como en:

find . | wc -l

la búsqueda va mucho más rápido, casi instantánea, o al menos lo hace para mí. Esto se debe a que la cláusula de tipo tiene que ejecutar una llamada del sistema stat() sobre cada nombre para comprobar su tipo - omitiéndola se evita hacerlo.

Esto tiene la diferencia de devolver el recuento de archivos más carpetas en lugar de sólo archivos, pero al menos para mí es suficiente, ya que yo lo utilizo principalmente para encontrar qué carpetas tienen enormes cantidades de archivos que tardan una eternidad en copiarse y comprimirse. Contar carpetas todavía me permite encontrar las carpetas con la mayoría de los archivos, necesito más velocidad que precisión.

26
26
26
2010-10-12 21:56:03 +0000

Para los archivos:

find -type f | wc -l

Para los directorios:

find -mindepth 1 -type d | wc -l

Ambos trabajan en el directorio de trabajo actual.

8
8
8
2010-10-13 01:58:12 +0000

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 hay necesidad de llamar dos veces a find si quieres buscar archivos y directorios

8
8
8
2010-10-13 14:26:17 +0000

Ligera actualización de la respuesta aceptada, si quieres un recuento de dirs y tal

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

Preguntas relacionadas

6
10
7
5
8