Esto usa awk
para crear columnas adicionales para las claves de clasificación. Solo llama al du
una vez. La salida debe verse exactamente como du
.
Lo he dividido en varias líneas, pero se puede recombinar en un solo liner.
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
Explicación:
- de empezar - crear una cadena de índice para sustituir 1, 2, 3 para K, M, G para agrupar por unidades, si no hay unidad (el tamaño es menor de 1K), entonces no hay coincidencia y se devuelve un cero (¡perfecto!)
- imprime los nuevos campos - unidad, valor (para hacer que alfa-clasificación funcione correctamente, no tiene relleno, longitud fija) y línea original
- indexar el último carácter del campo de tamaño
- tire hacia afuera la parte numérica del tamaño
- Ordenar los resultados, deseche las columnas adicionales
Inténtelo sin el comando cut
para ver lo que está haciendo.
Editar:
Aquí está una versión que hace la clasificación dentro del script AWK y no necesita cortar:
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]]}'
¿Has probado con 'du'? –
@TomaszNurkiewicz Sí (ver el script de arriba). El problema es que 'du' no ordena los resultados. – Matti
Dado un bloque aleatorio en un sistema de archivos, ¿es posible encontrar el nombre de archivo asociado a él? (Para esos bloques que están en un archivo/directorio). Si es así, esa sería una forma muy eficiente de encontrar los archivos más grandes. (Estoy bastante seguro de que la respuesta es No, busqué en Google antes, pero tal vez SO encuentre algo.) ¿Depende del sistema de archivos? –