Descubrí que no es fácil obtener el tamaño de un directorio en Bash.
Quiero que cuando escribo ls -<some options>
, pueda enumerar toda la suma del tamaño del archivo del directorio de forma recursiva y los archivos al mismo tiempo y ordenarlos por orden de tamaño.
¿Es eso posible?
du
es la respuesta.du
comando @KeithThompson @KitHo estima el uso del espacio de archivo, por lo que no puede usarlo si desea obtener el tamaño exacto.du
(al menos la versión GNU coreutils) probablemente tenga una opción para proporcionar la información.Respuestas:
Simplemente navegue al directorio y ejecute el siguiente comando:
O agregue -h para tamaños legibles por humanos y -r para imprimir directorios / archivos más grandes primero.
fuente
du -h
requieresort -h
también, para asegurarse de que, digamos981M
ordena antes1.3G
; consort -n
solo los números se tendrían en cuenta y estarían al revés.-a
y usar en--all
lugar de--max-depth=1
asídu -a -h --all | sort -h
sort -h
solo funciona en la versión de GNU / Linux, no hay suerte con BSD / OS X.Aparentemente, la
--max-depth
opción no está en la versión deldu
comando de Mac OS X. En su lugar, puede utilizar lo siguiente.du -h -d 1 | sort -n
fuente
(esto no mostrará archivos ocultos (.dotfiles))
Úselo
du -sm
para unidades Mb, etc. Siempre usoporque la línea total (
-c
) terminará en la parte inferior por razones obvias :)PD:
fuente
du --max-depth=1|sort -n
ofind . -mindepth 1 -maxdepth 1|xargs du -s|sort -n
por incluir archivos dot también.find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 du -s | sort -n
si algunas de las rutas encontradas pueden contener espacios.sudo du -smch * | sort -h | tail
Mando
Salida
Explicación
du
muestra "uso del disco"h
es para "legible por humanos" (tanto en género como en formato)max-depth=0
Los mediosdu
no mostrarán los tamaños de las subcarpetas (elimínelo si desea mostrar todos los tamaños de cada archivo en cada sub-, subsub-, ..., carpeta)r
es para "reverso" (el archivo más grande primero)ncdu
Cuando llegué a esta pregunta, quería limpiar mi sistema de archivos. La herramienta de línea de comandos
ncdu
se adapta mejor a esta tarea.Instalación en Ubuntu:
Uso:
Simplemente escriba
ncdu [path]
la línea de comando. Después de unos segundos para analizar la ruta, verá algo como esto:Elimina el elemento resaltado actualmente con d, sal con CTRL+c
fuente
ls -S
ordena por tamaño. Luego, para mostrar el tamaño también,ls -lS
muestra una pantalla larga (-l
), ordenada por tamaño (-S
). Yo suelo añadir-h
también para facilitar la lectura, así quels -lhS
,.fuente
du
, parece que alguien lo ha publicado. @sehe: Depende de su definición de real: muestra la cantidad de espacio que el directorio está usando para almacenarse. (No se trata simplemente de agregar el tamaño de las subentradas). No es un número aleatorio y no siempre es de 4 KB.Sencillo y rápido:
* requiere GNU Parallel .
fuente
Creo que podría haber descubierto lo que quieres hacer. Esto le dará una lista ordenada de todos los archivos y todos los directorios, ordenados por tamaño de archivo y tamaño del contenido en los directorios.
fuente
du
sea una opción, solo te dará un resultado aproximado.[versión mejorada]
Esto será mucho más rápido y preciso que la versión inicial a continuación y generará la suma de todo el tamaño de archivo del directorio actual:
el
stat -c %s
comando en un archivo devolverá su tamaño en bytes. Eltr
comando aquí se usa para superar lasxargs
limitaciones del comando (aparentemente,xargs
dividir los resultados en más líneas, rompiendo la lógica de mi comando). Portr
lo tanto, se ocupa de reemplazar el avance de línea con el+
signo (más).sed
tiene el único objetivo de eliminar el último+
signo de la cadena resultante para evitar quejas delbc
comando final (calculadora básica) que, como de costumbre, hace los cálculos.Rendimiento: lo probé en varios directorios y más de ~ 150.000 archivos en la parte superior (la cantidad actual de archivos de mi caja de fedora 15) y creo que es un resultado sorprendente:
En caso de que desee hacer una comparación con el
du -sb /
comando, generará un uso de disco estimado en bytes (-b
opción)Como esperaba, es un poco más grande que el cálculo de mi comando porque la
du
utilidad devuelve el espacio asignado de cada archivo y no el espacio consumido real.[versión inicial]
No puede usar el
du
comando si necesita saber el tamaño de la suma exacta de su carpeta porque (según la cita de la página del manual)du
estima el uso del espacio de archivos. Por lo tanto, lo llevará a un resultado incorrecto, una aproximación (tal vez cerca del tamaño de la suma, pero probablemente mayor que el tamaño real que está buscando).Creo que puede haber diferentes formas de responder a tu pregunta, pero esta es la mía:
Encuentra todos los archivos debajo. directorio (cambie. con el directorio que desee), también se incluyen archivos ocultos y (usando
xargs
) muestra sus nombres en una sola línea, luego produce una lista detallada usandols -l
. Esta salida enorme (a veces) se canaliza hacia el comando de corte y solo-f5
se toma el quinto campo ( ), que es el tamaño del archivo en bytes, y se vuelve a canalizar, loxargs
que produce nuevamente una sola línea de tamaños separados por espacios en blanco. Ahora tiene lugar una magia sed que reemplaza cada espacio en blanco con un+
signo más ( ) y finalmentebc
(calculadora básica) hace los cálculos.Es posible que necesite ajustes adicionales y es posible que el
ls
comando se queje de la lista de argumentos demasiado larga.fuente
Otra sencilla solución.
el resultado se verá así
cambiar "du -s" a "du -sh" mostrará un tamaño legible por humanos, pero no podremos ordenar con este método.
fuente
puede utilizar lo siguiente para listar archivos por tamaño du -h | sort -hr | más o du -h --max-depth = 0 * | sort -hr | más
fuente
Tiendo a usar du de una manera simple.
Esto me da una idea de qué directorios consumen más espacio. Entonces puedo realizar búsquedas más precisas más tarde.
fuente