Ceci utilise awk
pour créer des colonnes supplémentaires pour les clés de tri. Il n'appelle qu'une seule fois du
. La sortie devrait ressembler exactement à du
. Je l'ai divisé en plusieurs lignes, mais il peut être recombiné en une seule ligne.
du -h |
awk '{printf "%s %08.2f\t%s\n",
index("KMG", substr($1, length($1))),
substr($1, 0, length($1)-1), $0}' |
sort -r | cut -f2,3
Explication:
- BEGIN - créer une chaîne de caractères à l'index pour remplacer 1, 2, 3 K, M, G pour le groupement des unités, s'il n'y a pas d'unité (la taille est inférieure à 1K), alors il n'y a pas de correspondance et un zéro est renvoyé (parfait!)
- imprime les nouveaux champs - unité, valeur (pour que le tri alpha fonctionne correctement, il est rembourré, longueur fixe) et la ligne originale
- indexer le dernier caractère du champ de taille
- tirer la partie numérique du genre taille
- les résultats, jetez les colonnes supplémentaires
Essayez sans la commande cut
pour voir ce qu'il fait.
Edit:
Voici une version qui fait le tri dans le script AWK et n'a pas besoin coupé:
du -h |
awk '{idx = sprintf("%s %08.2f %s",
index("KMG", substr($1, length($1))),
substr($1, 0, length($1)-1), $0);
lines[idx] = $0}
END {c = asorti(lines, sorted);
for (i = c; i >= 1; i--)
print lines[sorted[i]]}'
Avez-vous essayé avec 'du'? –
@TomaszNurkiewicz Oui (voir le script ci-dessus). Le problème est que 'du' ne trie pas les résultats. – Matti
Étant donné un blocage aléatoire sur un système de fichiers, est-il possible de trouver le nom de fichier qui lui est associé? (Pour les blocs qui se trouvent dans un fichier/répertoire). Si c'est le cas, ce serait un moyen très efficace de trouver les fichiers les plus volumineux. (Je suis assez sûr que la réponse est Non, j'ai googlé avant, mais peut-être que SO va trouver quelque chose.) Dépendant du système de fichiers? –