Preciso de obter uma lista de resultados humanos legíveis.
Entretanto, o du
não tem um "classifique por tamanho" opção, e o encanamento para sortar
não'não funciona com a bandeira legível humana.
Por exemplo, a correr:
du | sort -n -r
Produz um uso de disco ordenado por tamanho (decrescente):
du |sort -n -r
65108 .
61508 ./dir3
2056 ./dir4
1032 ./dir1
508 ./dir2
No entanto, a sua utilização com a bandeira legível humana, não se classifica adequadamente:
du -h | sort -n -r
508K ./dir2
64M .
61M ./dir3
2.1M ./dir4
1.1M ./dir1
Alguém sabe de uma maneira de ordenar 'du -h' por tamanho?
Até onde eu posso ver, você tem três opções:
du
para ordenar antes da exibição.sortar
para suportar tamanhos humanos para ordenação numérica.Você também poderia fazer du -k
e viver com tamanhos no KiB.
Para a opção 3 você poderia usar o seguinte script:
#!/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
Pelo menos com as ferramentas habituais, isto será difícil devido ao formato em que os números legíveis por humanos estão (note que a ordenação faz um "bom trabalho" aqui, pois ordena os números - 508, 64, 61, 2, 2 - apenas não consegue ordenar números de ponto flutuante com um multiplicador adicional).
Eu tentaria ao contrário - usar a saída de "du | sort -n -r" e depois converter os números para um formato legível por humanos com algum script ou programa.