He encontrado du --inodes
útil, pero no estoy seguro de qué versión de du
Requiere. En Ubuntu 17.10, funciona lo siguiente:
du --inodes # all files and subdirectories
du --inodes -s # summary
du --inodes -d 2 # depth 2 at most
Combinar con | sort -nr
para ordenar descendentemente por número de inodos que contienen.
La forma más fácil parece ser find /path/to/search -ls | wc -l
Buscar se utiliza para recorrer todos los archivos y carpetas.
-ls
para enumerar (imprimir) todos los nombres. Este es un valor predeterminado y, si lo omite, seguirá funcionando igual en casi todos los sistemas. (Casi, ya que algunos pueden tener valores predeterminados diferentes). Sin embargo, es un buen hábito usar esto explícitamente.
Si solo usa el find /path/to/search -ls
parte imprimirá todos los archivos y directorios en su pantalla.
wc
es el conteo de palabras. el -l
opción le dice que cuente el número de líneas.
Puede usarlo de varias maneras, por ejemplo,
- archivo de prueba wc
- archivo de prueba de gato | baño
La primera opción le permite a wc abrir un archivo y contar el número de líneas, palabras y caracteres en ese archivo. La segunda opción hace lo mismo pero sin nombre de archivo, se lee desde la entrada estándar.
Puedes combinar comandos con una tubería |
. La salida del primer comando se canalizará a la entrada del segundo comando. Así find /path/to/search -ls | wc -l
usa find para enumerar todos los archivos y directorios y envía la salida a wc. Wc luego cuenta el número de líneas.
(Otra alternativa hubiera sido `ls | wc', pero find es mucho más flexible y una buena herramienta para aprender).
[Editar después del comentario]
Podría ser útil combinar find y exec.
P.ej. find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \;
enumerará todos los directorios en /, salvo algunos que no desee buscar. Podemos activar el comando anterior en cada uno de ellos, arrojando una suma de archivos por carpeta en /.
Sin embargo:
- Esto usa la extensión específica de GNU -max depth.
Funcionará en Linux, pero no en cualquier sistema similar a Unix. - Sospecho que es posible que desee una cantidad de archivos para todos y cada uno de los subdirectorios.
El siguiente script PHP hace el truco.
#!/usr/bin/php
<?php
function do_scan($dir, $dev) {
$total = 1;
if (\filetype($dir) === 'dir' && \lstat($dir)['dev'] == $dev) {
foreach (\scandir($dir) as $file) {
if ($file !== '.' && $file !== '..') {
$total += do_scan($dir . \DIRECTORY_SEPARATOR . $file, $dev);
}
}
print "$total\t$dir\n";
}
return $total;
};
foreach (\array_slice($argv, 1) as $arg) {
do_scan($arg, \lstat($arg)['dev']);
}
Póngalo en un archivo (por ejemplo, "treesize
"), chmod +x
y ejecútelo con ./treesize . | sort -rn | less
.