Některé verze du
podporovat argument --apparent-size
zobrazit zdánlivou velikost místo využití disku. Váš příkaz by tedy byl:
du -hs --apparent-size
Z manuálových stránek pro du, které jsou součástí 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
Zde je skript zobrazující velikost adresáře čitelnou pro člověka pomocí standardních nástrojů 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()}'
např.:
$ ds ~
72.891 GiB
Za předpokladu, že máte du
z GNU coreutils by tento příkaz měl vypočítat celkovou zdánlivou velikost libovolného počtu běžných souborů v adresáři bez libovolného omezení počtu souborů:
find . -type f -print0 | du -scb --files0-from=- | tail -n 1
Přidejte -l
možnost du
pokud jsou uvnitř nějaké pevné odkazy a chcete každý pevný odkaz počítat samostatně (ve výchozím nastavení du
počítá více pevných odkazů pouze jednou).
Nejdůležitější rozdíl oproti obyčejnému du -sb
je to rekurzivní du
také počítá velikosti adresářů, které různé souborové systémy vykazují rozdílně; aby se tomu zabránilo, find
příkaz se používá k předání pouze běžných souborů do du
. Dalším rozdílem je, že symbolické odkazy jsou ignorovány (pokud by se měly počítat, find
příkaz by měl být upraven).
Tento příkaz také spotřebuje více paměti než obyčejný du -sb
, protože pomocí --files0-from=FILE
dělá du
uložit čísla zařízení a inodů všech zpracované soubory, na rozdíl od výchozího chování pamatovat si pouze soubory s více než jedním pevným odkazem. (Toto není problém, pokud -l
Tato možnost se používá k vícenásobnému počítání pevných odkazů, protože jediným důvodem pro ukládání čísel zařízení a inodů je přeskočit pevné odkazy, které již byly zpracovány.)
Pokud chcete získat lidsky čitelné zobrazení celkové velikosti, stačí přidat -h
možnost (toto funguje, protože du
je vyvolán pouze jednou a vypočítá celkovou velikost sám, na rozdíl od některých jiných navrhovaných odpovědí):
find . -type f -print0 | du -scbh --files0-from=- | tail -n 1
nebo (pokud se obáváte, že některé účinky -b
jsou pak přepsány -h
)
find . -type f -print0 | du -sc --apparent-size -h --files0-from=- | tail -n 1