Recursivamente contar todos los archivos en un directorio

Posible duplicado:
¿Cómo puedo contar el número de carpetas en una unidad con Linux?

Tengo un árbol de directorio muy profundo en mi caja de Linux. Quisiera contar todos los archivos en esa trayectoria, 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 en /home , me gustaría que devolviera cuatro archivos. O puntos de bonificación si devuelve cuatro archivos y dos directorios. Básicamente, quiero el equivalente a hacer clic con el botón derecho en una carpeta en Windows y seleccionar propiedades y ver cuántos archivos / carpetas están contenidos en esa carpeta.

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

find . -type f | wc -l

Explicación:
find . -type f find . -type f encuentra todos los archivos ( -tipo f ) en este directorio ( . ) Y en todos los subdirectorios, los nombres de los archivos se imprimen a un estándar por línea.

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

Juntos cuentan todos tus archivos.

Las respuestas anteriores ya responden a la pregunta, pero voy a añadir que si utiliza find sin argumentos (excepto para la carpeta donde desea que la búsqueda suceda) 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 type tiene que ejecutar una llamada al sistema stat () en cada nombre para comprobar su tipo – omitiéndolo 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 en su mayoría utilizan esto para encontrar que las carpetas tienen enormes montos de archivos que tardan una eternidad para copiar y comprimirlos. Contando carpetas todavía me permite encontrar las carpetas con la mayoría de los archivos, necesito más velocidad que precisión.

Para los archivos:

 find -type f | wc -l 

Para directorios:

 find -mindepth 1 -type d | wc -l 

Ambos trabajan en el directorio de trabajo actual.

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

Una ligera actualización a la respuesta aceptada, si quieres contar los dirs y tal

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