J'ai besoin d'obtenir une liste de sortie du lisible par l'homme.
Cependant, du
n'a pas d'option "sort by size" ;, et le piping vers sort
ne fonctionne pas avec le drapeau human readable.
Par exemple, en exécutant :
du | sort -n -r
Affiche une utilisation du disque triée par taille (en ordre décroissant) :
du |sort -n -r
65108 .
61508 ./dir3
2056 ./dir4
1032 ./dir1
508 ./dir2
Cependant, en l'exécutant avec le drapeau "human readable", le tri n'est pas correct :
du -h | sort -n -r
508K ./dir2
64M .
61M ./dir3
2.1M ./dir4
1.1M ./dir1
Quelqu'un connaît-il un moyen de trier du -h
par taille ?
D'après ce que je vois, vous avez trois options :
du
pour trier avant d'afficher.sort
pour supporter les tailles humaines pour le tri numérique.Vous pouvez aussi faire du -k
et vivre avec des tailles en KiB.
Pour l'option 3, vous pouvez utiliser le script suivant :
#!/usr/bin/env python
import sys
import re
sizeRe = re.compile(r"^(\d+)(.*)$")
for line in sys.stdin.readlines():
mo = sizeRe.match(line)
if mo:
size = int(mo.group(1))
if size < 1024:
size = str(size)+"K"
elif size < 1024 ** 2:
size = str(size/1024)+"M"
else:
size = str(size/(1024 ** 2))+"G"
print "%s%s"%(size,mo.group(2))
else:
print line
Au moins avec les outils habituels, cela sera difficile en raison du format des nombres lisibles par l'homme (notez que sort fait un "bon travail" ici car il trie les nombres - 508, 64, 61, 2, 2 - il ne peut simplement pas trier les nombres à virgule flottante avec un multiplicateur supplémentaire).
J'essaierais dans l'autre sens - utiliser la sortie de "du | sort -n -r" et ensuite convertir les nombres en format lisible par l'homme avec un script ou un programme.