Solución 1:
Si tiene esto en un sistema de archivos dedicado, o tiene una sobrecarga constante de archivos, puede obtener un recuento aproximado de la cantidad de archivos observando la cantidad de inodos en el sistema de archivos a través de " df-i":
[email protected]:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75885 60413843 1% /
En mi caja de prueba de arriba tengo 75,885 inodos asignados. Sin embargo, estos inodos no son solo archivos, también son directorios. Por ejemplo:
[email protected]:~# mkdir /tmp/foo
[email protected]:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75886 60413842 1% /
[email protected]:~# touch /tmp/bar
[email protected]:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75887 60413841 1% /
NOTA:No todos los sistemas de archivos mantienen los recuentos de inodos de la misma manera. ext2/3/4 funcionará, sin embargo, btrfs siempre informa 0.
Si tiene que diferenciar los archivos de los directorios, tendrá que recorrer el sistema de archivos y "estadificar" cada uno para ver si es un archivo, directorio, enlace simbólico, etc. El mayor problema aquí no es la canalización de todo el texto a "wc", pero buscando entre todos los inodos y entradas de directorio para juntar esos datos.
Aparte de la tabla de inodos como se muestra en "df -i", realmente no hay una base de datos de cuántos archivos hay en un directorio determinado. Sin embargo, si esta información es importante para usted, puede crear y mantener dicha base de datos haciendo que sus programas incrementen un número cuando crean un archivo en este directorio y lo disminuyan cuando lo eliminen. Si no controla los programas que los crean, esta no es una opción.
Solución 2:
Escribí un programa de conteo de archivos personalizado para esta pregunta de StackOverflow:https://stackoverflow.com/questions/1427032/fast-linux-file-count-for-a-large-number-of-files
Puede encontrar el repositorio de GitHub aquí si desea navegar, descargar o contribuir:https://github.com/ChristopherSchultz/fast-file-count
Solución 3:
Si desea contar recursivamente la cantidad de archivos en un directorio, ubique El comando es el más rápido que conozco, supuse que tiene una base de datos actualizada (base de datos de actualización de Sudo ... hecha de manera predeterminada a través del trabajo cron todos los días). Sin embargo, puede acelerar el comando si evita el grep tubo.
Ver hombre localizar :
-c, --count
Instead of writing file names on standard output, write the number of
matching entries only.
Entonces el comando más rápido es:
locate -c -r '/path/to/dir'