J'essaie de nettoyer un disque dur qui a toutes sortes de merde accumulées au fil des ans. du
a aidé à réduire l'utilisation du disque, mais tout cela n'est toujours pas dû à la taille totale, mais en raison du nombre de fichiers et de répertoires au total.
Y a-t-il une façon de faire quelque chose comme du
mais ne pas compter la taille du fichier, mais plutôt le nombre de fichiers et de répertoires? Par exemple: un fichier est 1, et un répertoire est le nombre récursif de fichiers/répertoires à l'intérieur + 1.
Edit : J'aurais dû être plus clair. J'aimerais non seulement connaître le nombre total de fichiers/répertoires dans /
, mais aussi dans /home
, /usr
etc, et dans leurs sous-répertoires, de manière récursive, comme du
fait la taille.
Le suivant PHP script fait l'affaire.
#!/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']);
}
Mettre cela dans un fichier (dire, "treesize
"), chmod +x
ça et le gérer avec ./treesize . | sort -rn | less
.
J'ai trouvé du --inodes
utile, mais je ne suis pas sûr de quelle version de du
cela nécessite. Sur Ubuntu 17.10, les travaux suivants:
du --inodes # all files and subdirectories
du --inodes -s # summary
du --inodes -d 2 # depth 2 at most
Combiner avec | sort -nr
Pour trier des descentes par le nombre de contenant des inodes.
NCD est super pour cela!
À partir de la page Man, vous pouvez afficher des comptes par répertoire et par commande par compte également:
[...]
KEYS
C Order by number of items (press again for descending order)
[...]
c Toggle display of child item counts.
Par exemple:
Exploiter le fait que les DIRS et les fichiers sont séparés par /
. Ce script fait chaud répond à vos critères, mais sert à inspirer une solution complète. Vous devez également envisager d'indexer vos fichiers avec localisation.
geee: /R/tb/tmp
$ find 2>/dev/null | awk -F/ -f filez | sort -n
files: 57
3 imagemagick
7 portage
10 colemak-1.0
25 minpro.com
42 monolith
80 QuadTree
117 themh
139 skyrim.stings
185 security-howto
292 ~t
329 skyrim
545 HISTORY
705 minpro.com-original
1499 transmission-2.77
23539 ugent-settings
>
$ cat filez
{
a[$2]++; # $1= folder, $2 = everything inside folder.
}
END {
for (i in a) {
if (a[i]==1) {files++;}
else { printf "%d\t%s\n", a[i], i; }
}
print "files:\t" files
}
>
$ time locate / | awk -F/ -f /R/tb/tmp/filez | sort -n
files: 13
2
2 .fluxbox
10 M
11 BIN
120 bin
216 sbin
234 boot
374 R
854 dev
1351 lib
2018 etc
9274 media
30321 opt
56516 home
93625 var
222821 usr
351367 mnt
time: Real 0m17.4s User 0m4.1s System 0m3.1s