¿Cómo puedo ordenar todos los archivos por tamaño en un directorio?

48

¿Cómo puedo mostrar los archivos en un directorio Unix ordenados por su tamaño legible por humanos, yendo de mayor a menor?

Lo intenté

du -h | sort -V -k 1 

pero no parece funcionar.

user46976
fuente
¿Puede aclarar si espera que los tamaños del subdirectorio aparezcan también en la salida, y también si está buscando el tamaño aparente de los archivos o el tamaño real que usan en el disco?
jlliagre

Respuestas:

53

ls(1) /sort:

-S     sort by file size
Hola71
fuente
1
-Sya no es un argumento de clasificación válido al menos en ubuntu. La siguiente respuesta de @alex funcionó para mí. El enlace de respuesta es superuser.com/a/990437/528836 .
Prasanna
33
$ ls -lhS

-l     use a long listing format
-h     with -l, print sizes in human readable format (e.g., 1K 234M 2G)
-S     sort by file size
kev
fuente
16

Si tiene la sortversión adecuada , simplemente puede usar:

du -h | sort -rh

el mio es

$ sort --version
sort (GNU coreutils) 8.12
ztank1013
fuente
4

ls -SNo era una opción en el sistema operativo para mí. Lo siguiente funcionó:
ls -l | sort -k 5nr
"la clave" era especificar la columna para ordenar (obtener, la "clave"). Arriba estoy especificando la clasificación de-k 5nr significado en la quinta columna, que es el tamaño (5) evaluado como un número (n) en orden descendente (n)

Referencia de documentación tipo para más información

Alex
fuente
4

du -ha | sort -h

du : estima el uso del disco de archivos.

-h : for human
-a : all files

sort : ordena líneas de texto.

-h : for human

man du; man sortpara más. Funciona para mí en ubuntu v15.

Andrew_1510
fuente
1

Tengo esto para trabajar para mí:

ls -l | sort -g -k 5 -r

Lo cual (acabo de descubrir) es lo mismo que:

ls -lS
Aaron
fuente
0

A diferencia ls -S, esto manejará adecuadamente los archivos dispersos:

ls -lsh | sort -n | sed 's/^[0-9 ]* //'
jlliagre
fuente