Ř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'