Ho trovato du --inodes
utile, ma non sono sicuro di quale versione di du
richiede. Su Ubuntu 17.10, funziona quanto segue:
du --inodes # all files and subdirectories
du --inodes -s # summary
du --inodes -d 2 # depth 2 at most
Combina con | sort -nr
per ordinare in modo decrescente in base al numero di inode contenenti.
Il modo più semplice sembra essere find /path/to/search -ls | wc -l
Find viene utilizzato per esplorare tutti i file e le cartelle.
-ls
elencare (stampare) tutti i nomi. Questa è un'impostazione predefinita e se la lasci fuori funzionerà comunque allo stesso modo su quasi tutti i sistemi. (Quasi, dal momento che alcuni potrebbero avere impostazioni predefinite diverse). Tuttavia, è una buona abitudine usarla esplicitamente.
Se usi solo il find /path/to/search -ls
parte stamperà tutti i file e le directory sullo schermo.
wc
è il conteggio delle parole. il -l
l'opzione gli dice di contare il numero di linee.
Puoi usarlo in diversi modi, ad esempio
- file di prova wc
- file di prova gatto | wc
La prima opzione consente a wc di aprire un file e contare il numero di righe, parole e caratteri in quel file. La seconda opzione fa lo stesso ma senza nome file legge da stdin.
Puoi combinare i comandi con una pipe |
. L'output del primo comando verrà reindirizzato all'input del secondo comando. Quindi find /path/to/search -ls | wc -l
usa find per elencare tutti i file e la directory e invia l'output a wc. Wc quindi conta il numero di linee.
(Un'altra alternativa sarebbe stata `ls | wc', ma find è molto più flessibile e un buon strumento per imparare.)
[Modifica dopo il commento]
Potrebbe essere utile combinare find ed exec.
Per esempio. find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \;
elencherà tutte le directory in /, tranne alcune in cui non vuoi cercare. Possiamo attivare il comando precedente su ciascuno di essi, ottenendo una somma di file per cartella in /.
Tuttavia:
- Questo usa l'estensione specifica GNU -maxdepth.
Funzionerà su Linux, ma non su qualsiasi unix-a-alike. - Sospetto che tu possa effettivamente volere un numero di file per ogni sottodirectory.
Il seguente script PHP fa il trucco.
#!/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']);
}
Mettilo in un file (ad esempio, "treesize
"), chmod +x
ed eseguilo con ./treesize . | sort -rn | less
.