GNU/Linux >> Znalost Linux >  >> Linux

Jak získat skutečnou velikost adresáře (mimo du)?

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

Linux
  1. Linux – jak zkombinovat strom s velikostí adresáře?

  2. Jak programově získám volné místo na disku pro adresář v Linuxu

  3. Jak získat všechny soubory přesahující určitou velikost a smazat je

  1. Jak mohu vidět velikost souborů a adresářů v linuxu?

  2. Jak získám absolutní adresář souboru v bash?

  3. Jak získat fyzickou velikost souboru v Linuxu?

  1. Jak získat počet souborů v adresáři pomocí příkazového řádku?

  2. Jak nainstalovat R 3.3.1 do vlastního adresáře?

  3. Jak získat velikost adresáře v Linuxu