GNU/Linux >> Znalost Linux >  >> Linux

Jak najdu soubory a součet jejich velikostí?

Řešení

Zadáním volby -c (nebo --total ) až du(1) , můžete mu dát pokyn, aby vytvořil celkový součet. Pokud vaše implementace du(1) podporuje kteroukoli z těchto možností, požadovaného efektu dosáhnete pomocí následujícího příkazu:

$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +

UPRAVIT: Všimněte si, že pokud počet souborů překročí maximální počet parametrů povolených vaším systémem, find může stále provádět command vícekrát. Některé implementace du(1) také podporuje čtení názvů souborů ze souboru, který netrpí zmíněným omezením:

$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames

Vysvětlení

Rozdíl mezi sémantikou -exec command {} \; a -exec command {} + je následující:

  • command {} \; provede command jednou pro každý výsledek find . Místo {} se předá cesta k výsledku .

    $ touch 1 2 3
    $ find  1 2 3 -maxdepth 0 -exec echo {} \;
    1
    2
    3
    
  • command {} + provede command , když byly načteny všechny výsledky. Místo {} jsou předány cesty k výsledkům .

    $ touch 1 2 3
    $ find  1 2 3 -maxdepth 0 -exec echo {} +
    1 2 3
    

-print0 volba způsobí find(1) vytisknout nalezené názvy souborů na standardní výstup oddělený znakem null a --files0-from volba způsobila du(1) číst názvy souborů oddělené nulou. Na rozdíl od znaku nového řádku se v názvu souboru nemusí objevit znak null, takže výstup je jednoznačný.

Chcete-li se dozvědět více o možnostech du(1) a find(1) , měli byste se podívat na příslušné manuálové stránky:

$ man du
$ man find

Zkuste toto:

du -c `find . -name 'flibble*' -ctime +90` | tail -1

Původní příkaz dává du jeden argument a pak jej provádí, dokud neprojde všechny argumenty. Tímto způsobem jednoduše dáte všechny argumenty najednou, poté odříznete jednotlivé velikosti a ponecháte pouze součet. Pokud chcete, můžete odstranit trubku a konec a zobrazit velikost každého souboru.


Můžete zkusit toto:

find . -name 'flibble*' -ctime +90 -exec du -ch {} + | grep total

Linux
  1. Jak najít konfigurační soubory MySQL, PHP a Apache

  2. Jak zjistit počet souborů v adresáři a podadresářích

  3. Jak najít a odstranit prázdné adresáře a soubory v Unixu

  1. Jak najít a odstranit prázdné adresáře a soubory v Linuxu

  2. Pomocí ls vypíšete adresáře a jejich celkové velikosti

  3. Najděte a zkopírujte soubory

  1. Jak najít soubory s oprávněními SUID a SGID v Linuxu

  2. Jak hledat soubory podle velikosti a přípony?

  3. Jak spočítat celkový počet řádků nalezených souborů?