Estoy tratando de limpiar un disco duro que tiene todo tipo de basura acumulada a lo largo de los años. du
ha ayudado a reducir el uso del disco, pero todo esto no es difícil de manejar debido al tamaño total, sino a la gran cantidad de archivos y directorios en total.
¿Hay alguna manera de hacer algo como, du
sin contar el tamaño del archivo, sino el número de archivos y directorios? Por ejemplo: un archivo es 1 y un directorio es el número recursivo de archivos / directorios dentro de él + 1.
Editar: debería haber sido más claro. Me gustaría saber no solo el número total de archivos / directorios /
, sino también en /home
, /usr
etc., y en sus subdirectorios, recursivamente, como lo du
hace por tamaño.
Respuestas:
He encontrado
du --inodes
útil, pero no estoy seguro de qué versióndu
requiere. En Ubuntu 17.10, funciona lo siguiente:Combinar con
| sort -nr
para ordenar descendente por número de inodos que contienen.fuente
La forma más fácil parece ser
find /path/to/search -ls | wc -l
Buscar se usa para recorrer todos los archivos y carpetas.
-ls
para enumerar (imprimir) todos los nombres. Este es un valor predeterminado y si lo deja fuera, seguirá funcionando igual en casi todos los sistemas. (Casi, ya que algunos pueden tener valores predeterminados diferentes). Sin embargo, es una buena costumbre usar esto explícitamente.Si solo usa la
find /path/to/search -ls
parte, imprimirá todos los archivos y directorios en su pantalla.wc
es el recuento de palabras la-l
opción le dice que cuente el número de líneas.Puede usarlo de varias maneras, p. Ej.
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 stdin.
Puedes combinar comandos con una tubería
|
. La salida del primer comando se canalizará a la entrada del segundo comando. Por lo tanto,find /path/to/search -ls | wc -l
utiliza find para enumerar todos los archivos y directorios y alimenta la salida a wc. Wc luego cuenta el número de líneas.(Otra alternativa habría sido 'ls | wc', pero find es mucho más flexible y una buena herramienta para aprender).
[Editar después del comentario]
Puede ser útil combinar el find y el exec.
Por ejemplo
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 /, excluirá algunos que no desea buscar. Podemos activar el comando anterior en cada uno de ellos, produciendo una suma de archivos por carpeta en /.Sin embargo:
Funcionará en Linux, pero no en cualquier unix-a-like.
fuente
El siguiente script PHP hace el truco.
Ponlo en un archivo (por ejemplo, "
treesize
"),chmod +x
y ejecútalo con./treesize . | sort -rn | less
.fuente
du
eso simplemente cuenta en lugar de sumar el tamaño, que es exactamente lo que hizo la pregunta original.¡ncdu es genial para esto!
Desde la página de manual, puede mostrar los recuentos por directorio y ordenar por recuentos también:
Por ejemplo:
fuente
Explota el hecho de que los directorios y los archivos están separados por
/
. Este script cumple con sus criterios, pero sirve para inspirar una solución completa. También debe considerar indexar sus archivos con localizar.>
>
fuente
Aquí hay una solución que usa bash, inspirada en una publicación de Unix y Linux .
Si hay algunas carpetas de las que no desea ver los detalles
.git
, puede excluirlas de la lista congrep
.fuente