Quiero ver cuántos archivos hay en subdirectorios para saber dónde está todo el uso de inodo en el sistema. Algo así como lo haría para el uso del espacio
du -sh /*
lo que me dará el espacio utilizado en los directorios fuera de la raíz, pero en este caso quiero la cantidad de archivos, no el tamaño.
disk-usage
recursive
inode
xenoterracida
fuente
fuente
du -sh /*
dejaba bastante claro cómo quería que funcionara el conteo. Lo mismo, solo cuenta los archivos, no los bytes.Respuestas:
Gracias a Gilles y xenoterracide por las soluciones de seguridad / compatibilidad.
La primera parte:
find -maxdepth 1 -type d
devolverá una lista de todos los directorios en el directorio de trabajo actual. Esto se canaliza a ...La segunda parte:
while read -r dir; do
comienza un ciclo while, siempre que la tubería que entra en while esté abierta (que es hasta que se envíe la lista completa de directorios), el comando de lectura colocará la siguiente línea en la variable "dir". Entonces continúa ...La tercera parte:
printf "%s:\t" "$dir";
se imprimirá en la cadena "$ dir" (que es la celebración de uno de los nombres de directorio), seguido de una ficha.La cuarta parte:
find "$dir -f file"
hace una lista de todos los archivos dentro del nombre del directorio contenido en "$ dir". Esta lista se envía a ...La quinta parte:
wc -l;
cuenta el número de líneas que se envían a su entrada estándar.La parte final:
done
simplemente finaliza el ciclo while.Entonces obtenemos una lista de todos los directorios en el directorio actual. Para cada uno de esos directorios, generamos una lista de todos los archivos en él para que podamos contarlos todos usando
wc -l
. El resultado se verá así:fuente
read -r
comoread
golosinas simples especialmente. Luegoecho -en "$dir:\t"
volverá a destrozar las barras invertidas; una solución simple es usarprintf '%s:\t' "$dir"
en su lugar. A continuación,$dir
debe ser"$dir"
( siempre use comillas dobles alrededor de sustituciones variables ).find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" | wc -l; done
sort -n -r -k2
al final de esto, para muchos directorios, para saber dónde es el mayor uso-type f
para quefind -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
illegal option -- m
en elfind
comando Lo cambiéfind . -maxdepth ...
y lo puse a trabajar.Intente
find . -type f | wc -l
, contará todos los archivos en el directorio actual, así como todos los archivos en subdirectorios. Tenga en cuenta que todos los directorios no se contarán como archivos, solo los archivos normales sí.fuente
Aquí hay una compilación de algunos comandos útiles de listado (re-hash basado en el código de los usuarios anteriores):
Lista de carpetas con recuento de archivos:
Lista de carpetas con un recuento de archivos distinto de cero:
Lista de carpetas con recuento de subcarpetas:
Lista de carpetas con recuento de subcarpetas distinto de cero:
Lista de carpetas vacías:
Lista de carpetas no vacías con conteo de contenido:
fuente
Tratar:
como punto de partida, o si realmente solo desea recurrir a través de los subdirectorios de un directorio (y omitir los archivos en ese directorio de nivel superior)
fuente
find
funciona de forma recursiva a través de todos los subdirectorios por defecto. Si desea que funcione en varias ubicaciones, puede especificarlas todas entrefind
y-type
.698035
. Debería ver unos 6 números./home
? Estaría 100% seguro de que no.La siguiente solución cuenta el número real de inodos usados a partir del directorio actual:
Para obtener el número de archivos del mismo subconjunto, use:
Para soluciones que exploran solo subdirectorios, sin tener en cuenta los archivos en el directorio actual, puede consultar otras respuestas.
fuente
find -printf '%i\n' | sort -u | wc -l
. Si quisieras ser portátil, necesitarías en sufind . -exec ls -id {} + | cut …
lugar.OS X 10.6 se ahoga con el comando en la respuesta aceptada, porque no especifica una ruta para
find
. En su lugar use:fuente
Sé que llego tarde a la fiesta, pero creo que esta
bash
solución pura (u otra concha que acepta el doble globo de estrellas) podría ser mucho más rápida en algunas situaciones:salida:
fuente
Prueba esto:
Debería funcionar bien a menos que los nombres de archivo incluyan nuevas líneas.
fuente
-maxdepth 1
inmediatamente después del primerofind
. Si desea incluir el número de subdirectorios en su recuento, elimine-type f
al final (eso debería haber sido de! -type d
todos modos, para que todos los archivos que no sean de directorio se hubieran incluido).Si tiene
ncdu
instalado (algo que debe tener cuando quiere hacer una limpieza), simplemente escribac
"Alternar visualización de recuentos de elementos secundarios". YC
para "Ordenar por elementos".fuente
du --inodes
No estoy seguro de por qué nadie (incluido yo) sabía:
Estoy bastante seguro de que esto resuelve el problema del OP. He comenzado a usarlo mucho para descubrir dónde está toda la basura en mis enormes unidades (y descargarla en un disco más antiguo).
Informacion adicional
Si NO desea recurrir (que puede ser útil en otras situaciones), agregue
fuente