Našel jsem du --inodes
užitečné, ale nejsem si jistý, která verze du
to vyžaduje. Na Ubuntu 17.10 funguje následující:
du --inodes # all files and subdirectories
du --inodes -s # summary
du --inodes -d 2 # depth 2 at most
Zkombinujte s | sort -nr
seřadit sestupně podle počtu obsahujících inodů.
Nejjednodušší způsob se zdá být find /path/to/search -ls | wc -l
Najít se používá k procházení všemi soubory a složkami.
-ls
vypsat (vytisknout) všechna jména. Toto je výchozí nastavení a pokud jej vynecháte, bude stále fungovat stejně téměř ve všech systémech. (Téměř, protože některé mohou mít jiné výchozí hodnoty). Je však dobrým zvykem toto výslovně používat.
Pokud použijete pouze find /path/to/search -ls
část vytiskne všechny soubory a adresáře na vaši obrazovku.
wc
je počet slov. -l
volba mu říká, že má počítat počet řádků.
Můžete jej použít několika způsoby, např.
- testovací soubor wc
- testovací soubor kočky | wc
První možnost umožňuje wc otevřít soubor a spočítat počet řádků, slov a znaků v tomto souboru. Druhá možnost dělá totéž, ale bez názvu souboru čte ze stdin.
Příkazy můžete kombinovat s čárou |
. Výstup z prvního příkazu bude přesměrován na vstup druhého příkazu. Tedy find /path/to/search -ls | wc -l
používá find k vypsání všech souborů a adresářů a posílá výstup do wc. Wc pak spočítá počet řádků.
(Další alternativou by bylo `ls | wc', ale find je mnohem flexibilnější a dobrý nástroj k učení.)
[Upravit po komentáři]
Může být užitečné zkombinovat find a exec.
Např. find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \;
zobrazí seznam všech adresářů v /, zakáže některé, které nechcete prohledávat. Na každém z nich můžeme spustit předchozí příkaz, čímž získáme součet souborů na složku v /.
Nicméně:
- Toto používá GNU specifické rozšíření -maxdepth.
Bude fungovat na Linuxu, ale ne na jakémkoli unixu. - Předpokládám, že byste ve skutečnosti mohli chtít určitý počet souborů pro každý podadresář.
Následující PHP skript to udělá.
#!/usr/bin/php
<?php
function do_scan($dir, $dev) {
$total = 1;
if (\filetype($dir) === 'dir' && \lstat($dir)['dev'] == $dev) {
foreach (\scandir($dir) as $file) {
if ($file !== '.' && $file !== '..') {
$total += do_scan($dir . \DIRECTORY_SEPARATOR . $file, $dev);
}
}
print "$total\t$dir\n";
}
return $total;
};
foreach (\array_slice($argv, 1) as $arg) {
do_scan($arg, \lstat($arg)['dev']);
}
Vložte to do souboru (řekněme „treesize
"), chmod +x
a spusťte jej pomocí ./treesize . | sort -rn | less
.