Certaines versions de du
prendre en charge l'argument --apparent-size
pour afficher la taille apparente au lieu de l'utilisation du disque. Donc votre commande serait :
du -hs --apparent-size
À partir des pages de manuel pour du incluses avec 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
Voici un script affichant une taille de répertoire lisible par l'homme à l'aide des outils standard 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()}'
ex :
$ ds ~
72.891 GiB
En supposant que vous avez du
à partir de GNU coreutils, cette commande doit calculer la taille apparente totale d'un nombre arbitraire de fichiers réguliers dans un répertoire sans aucune limite arbitraire sur le nombre de fichiers :
find . -type f -print0 | du -scb --files0-from=- | tail -n 1
Ajoutez le -l
option à du
s'il y a des fichiers liés en dur à l'intérieur et que vous voulez compter chaque lien dur séparément (par défaut du
compte plusieurs liens physiques une seule fois).
La différence la plus importante avec le simple du -sb
est-ce récursif du
compte également la taille des répertoires, qui sont signalés différemment par différents systèmes de fichiers ; pour éviter cela, le find
La commande est utilisée pour transmettre uniquement des fichiers normaux à du
. Une autre différence est que les liens symboliques sont ignorés (s'ils doivent être comptés, le find
la commande doit être ajustée).
Cette commande consommera également plus de mémoire que le simple du -sb
, car en utilisant le --files0-from=FILE
fait du
stocker les numéros d'appareil et d'inode de tous fichiers traités, par opposition au comportement par défaut consistant à ne mémoriser que les fichiers avec plus d'un lien physique. (Ce n'est pas un problème si le -l
est utilisée pour compter plusieurs fois les liens physiques, car la seule raison de stocker les numéros de périphérique et d'inode est d'ignorer les fichiers liés qui ont déjà été traités.)
Si vous souhaitez obtenir une représentation lisible par l'homme de la taille totale, ajoutez simplement le -h
option (cela fonctionne car du
n'est invoqué qu'une seule fois et calcule lui-même la taille totale, contrairement à d'autres réponses suggérées) :
find . -type f -print0 | du -scbh --files0-from=- | tail -n 1
ou (si vous craignez que certains effets de -b
sont alors remplacés par -h
)
find . -type f -print0 | du -sc --apparent-size -h --files0-from=- | tail -n 1