Alcune versioni di du
supporta l'argomento --apparent-size
per mostrare la dimensione apparente invece dell'utilizzo del disco. Quindi il tuo comando sarebbe:
du -hs --apparent-size
Dalle pagine man per du incluse in 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
Ecco uno script che mostra una dimensione di directory leggibile dall'uomo utilizzando gli strumenti 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()}'
es:
$ ds ~
72.891 GiB
Supponendo che tu abbia du
da GNU coreutils, questo comando dovrebbe calcolare la dimensione apparente totale di un numero arbitrario di file regolari all'interno di una directory senza limiti arbitrari sul numero di file:
find . -type f -print0 | du -scb --files0-from=- | tail -n 1
Aggiungi il -l
opzione a du
se ci sono alcuni file hardlink all'interno e vuoi contare ogni hardlink separatamente (per impostazione predefinita du
conta più hardlink una sola volta).
La differenza più importante con il semplice du -sb
è quel du
ricorsivo conta anche le dimensioni delle directory, che sono riportate in modo diverso da diversi filesystem; per evitare questo, il find
Il comando è usato per passare solo file regolari a du
. Un'altra differenza è che i collegamenti simbolici vengono ignorati (se dovessero essere contati, il find
comando dovrebbe essere modificato).
Questo comando consumerà anche più memoria del semplice du -sb
, perché usando il --files0-from=FILE
rende du
memorizza i numeri di dispositivo e inode di tutti file elaborati, in contrasto con il comportamento predefinito di ricordare solo i file con più di un collegamento fisico. (Questo non è un problema se -l
viene utilizzata per contare gli hardlink più volte, perché l'unico motivo per memorizzare i numeri di dispositivo e inode è ignorare i file hardlink che erano già stati elaborati.)
Se vuoi ottenere una rappresentazione leggibile dall'uomo della dimensione totale, aggiungi -h
opzione (funziona perché du
viene invocato solo una volta e calcola la dimensione totale stessa, a differenza di altre risposte suggerite):
find . -type f -print0 | du -scbh --files0-from=- | tail -n 1
o (se sei preoccupato che alcuni effetti di -b
vengono quindi sovrascritti da -h
)
find . -type f -print0 | du -sc --apparent-size -h --files0-from=- | tail -n 1