Algunas versiones de du
apoyar el argumento --apparent-size
para mostrar el tamaño aparente en lugar del uso del disco. Entonces su comando sería:
du -hs --apparent-size
De las páginas de manual para du incluidas con Ubuntu 12.04 LTS:
--apparent-size
print apparent sizes, rather than disk usage; although the
apparent size is usually smaller, it may be larger due to holes
in (`sparse') files, internal fragmentation, indirect blocks,
and the like
Aquí hay una secuencia de comandos que muestra un tamaño de directorio legible por humanos utilizando las herramientas estándar de Unix (POSIX).
#!/bin/sh
find ${1:-.} -type f -exec ls -lnq {} \+ | awk '
BEGIN {sum=0} # initialization for clarity and safety
function pp() {
u="+Ki+Mi+Gi+Ti+Pi+Ei";
split(u,unit,"+");
v=sum;
for(i=1;i<7;i++) {
if(v<1024) break;
v/=1024;
}
printf("%.3f %sB\n", v, unit[i]);
}
{sum+=$5}
END{pp()}'
por ejemplo:
$ ds ~
72.891 GiB
Asumiendo que tienes du
de GNU coreutils, este comando debe calcular el tamaño aparente total de un número arbitrario de archivos regulares dentro de un directorio sin límites arbitrarios en el número de archivos:
find . -type f -print0 | du -scb --files0-from=- | tail -n 1
Agrega el -l
opción a du
si hay algunos archivos con enlaces fijos dentro y desea contar cada enlace duro por separado (por defecto du
cuenta múltiples enlaces duros solo una vez).
La diferencia más importante con el du -sb
simple es ese recursivo du
también cuenta los tamaños de los directorios, que se informan de manera diferente según los diferentes sistemas de archivos; para evitar esto, el find
El comando se usa para pasar solo archivos regulares a du
. Otra diferencia es que los enlaces simbólicos se ignoran (si se deben contar, el find
el comando debe ser ajustado).
Este comando también consumirá más memoria que el simple du -sb
, porque usando el --files0-from=FILE
hace du
almacenar dispositivos y números de inodo de todos archivos procesados, a diferencia del comportamiento predeterminado de recordar solo archivos con más de un vínculo físico. (Esto no es un problema si -l
La opción se usa para contar enlaces duros varias veces, porque la única razón para almacenar números de dispositivo e inodo es omitir archivos con enlaces duros que ya se han procesado.)
Si desea obtener una representación legible por humanos del tamaño total, simplemente agregue el -h
opción (esto funciona porque du
se invoca solo una vez y calcula el tamaño total, a diferencia de otras respuestas sugeridas):
find . -type f -print0 | du -scbh --files0-from=- | tail -n 1
o (si le preocupa que algunos efectos de -b
luego son anulados por -h
)
find . -type f -print0 | du -sc --apparent-size -h --files0-from=- | tail -n 1