GNU/Linux >> Znalost Linux >  >> Linux

Rychlý způsob rekurzivního počítání souborů v linuxu

Řešení 1:

Pokud to máte na vyhrazeném souborovém systému nebo máte stálý počet souborů nad hlavou, můžete získat dostatečně hrubý počet souborů, když se podíváte na počet inodů v souborovém systému pomocí " df -i":

[email protected]:~# df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            60489728   75885 60413843    1% /

Na mé testovací krabici výše mám přiděleno 75 885 inodů. Tyto inody však nejsou jen soubory, jsou to také adresáře. Například:

[email protected]:~# mkdir /tmp/foo
[email protected]:~# df -i /tmp 
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            60489728   75886 60413842    1% /
[email protected]:~# touch /tmp/bar
[email protected]:~# df -i /tmp
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            60489728   75887 60413841    1% /

POZNÁMKA:Ne všechny systémy souborů udržují počty inodů stejným způsobem. ext2/3/4 bude fungovat, ale btrfs vždy hlásí 0.

Pokud musíte rozlišovat soubory od adresářů, budete muset projít souborový systém a "stat" každý z nich, abyste zjistili, zda se jedná o soubor, adresář, symbolický odkaz atd... Největší problém zde není přesměrování veškerého textu do "wc", ale hledání mezi všemi inody a položkami adresáře, aby se tato data dala dohromady.

Kromě tabulky inodů, jak je znázorněna "df -i", ve skutečnosti neexistuje žádná databáze, kolik souborů je v daném adresáři. Pokud jsou však pro vás tyto informace důležité, můžete takovou databázi vytvořit a udržovat tak, že vaše programy při vytváření souboru v tomto adresáři zvýší číslo a při smazání je sníží. Pokud neovládáte programy, které je vytvářejí, není tato možnost.

Řešení 2:

Napsal jsem vlastní program pro počítání souborů pro tuto otázku StackOverflow:https://stackoverflow.com/questions/1427032/fast-linux-file-count-for-a-large-number-of-files

Pokud chcete procházet, stahovat nebo přispívat, můžete repozitář GitHubu najít zde:https://github.com/ChristopherSchultz/fast-file-count

Řešení 3:

Pokud chcete rekurzivně spočítat počet souborů v adresáři, najděte příkaz je nejrychlejší, co znám, předpokládám, že máte aktuální databázi (databáze sudo update .. implicitně vytvořena přes chron job každý den). Můžete však příkaz urychlit, pokud se vyhnete grep trubka.

Viz lokace muže :

-c, --count
       Instead  of  writing  file  names on standard output, write the number of 
       matching entries only.

Takže nejrychlejší příkaz je:

locate -c -r '/path/to/dir'

Linux
  1. Jak zvýšit limit počtu otevřených souborů v Linuxu

  2. Existuje způsob, jak zajistit, aby souborové systémy ext v Linuxu využívaly méně místa pro sebe?

  3. Rychlejší způsob, jak odstranit velké množství souborů

  1. Maximální počet souborů/adresářů na Linuxu?

  2. Rekurzivní počítání souborů v adresáři Linuxu

  3. Rekurzivní kopírování skrytých souborů - Linux

  1. Jak spočítat počet souborů v každém adresáři?

  2. Jak rychle a spolehlivě přenášet soubory mezi Linuxem a Androidem?

  3. Mohu zvýšit počet inodů v Linuxu?