Mostrando tamanhos de arquivo em ordem de classificação

7

Como mostrar uma lista de arquivos de uma raiz de diretório ordenada em ordem descendente de tamanho de arquivo a partir da linha de comando?

    
por Andriy Kryvtsun 09.03.2016 / 19:29

5 respostas

3

Da sua pasta:

find . -maxdepth 1 -type f -exec du -h {} + | sort --human-numeric-sort --reverse

Você pode definir a profundidade com que pode procurar arquivos com o parâmetro -maxdepth ou sem que seja recursivo.

    
por EdiD 09.03.2016 / 19:39
3

Se você quiser listar tudo no diretório de forma recursiva, use find ou du com sort :

find /some/path -type f -printf '%s %p\n' | sort -rn
du -h /some/path | sort -rh

O primeiro mostrará apenas arquivos e tamanho em bytes. O último mostrará os tamanhos de arquivo e de diretório cumulativo, em formato legível por humanos (usando KB, MB, etc.). sort , consequentemente, usa o numérico para o primeiro ( -n ) e legível para o último ( -h ).

Com mais complexidade, a melhor opção seria:

find /some/path -type f -print0 | du --files0-from=- -0h | sort -rzh | tr '
find /some/path -type f -printf '%s %p\n' | sort -rn
du -h /some/path | sort -rh
' '\n'

du pode ler uma lista delimitada por NUL de arquivos da entrada, e find pode imprimir nomes de arquivos delimitados por NUL usando -print0 . sort pode, então, pegar a lista de tamanhos e nomes de arquivos delimitados pelo NUL, classificá-los e, finalmente, substituir NULs por novas linhas para exibição conveniente.

Como nomes de arquivos e caminhos podem conter qualquer coisa, exceto o caractere ASCII NUL, o uso de linhas delimitadas por NUL irá processá-los da maneira mais segura.

Você também pode obter find para imprimir o tamanho como visto no primeiro comando, mas com -printf '%s %pdu' para continuar usando linhas delimitadas por NUL e pular usando %code% como intermediário.

    
por muru 09.03.2016 / 19:38
1

Como @Terrance disse, ls -lS classifica os arquivos em ordem decrescente. Para todos os arquivos, ls -lSa funciona.

    
por NoOneIsHere 10.03.2016 / 16:02
0

É suficiente usar du e sort

du --max-depth 1 * | sort -n -k1

Exemplo da saída,

$ du --max-depth 1 * | sort -n -k1
4   bin/CS-1400
4   bin/csrc
4   bin/DIR@YOLO
4   bin/EET2350
4   bin/HW6
4   RS232Functions.c
4   RS232Functions.c~
4   Untitled Folder
8   1204686.docx_en-US_zh-CN.docx
8   bin/shell
16  MSUDenver_50th_Formal.png
20  bb0239ba-1718-4778-b19a-3826f36a95cd.png
20  mainLogo.png
24  bin/NAME WITH SPACES
32  bin/ala
32  bin/Online_book
60  bin/HORTON
72  bin/JAVA-OTHER
    
por Sergiy Kolodyazhnyy 12.03.2016 / 17:44
0

Este comando irá ordenar por tamanho em kb

du -sk * | sort -n

Você pode reverter isso com:

du -sk * | sort -rn
    
por Cleber Reizen 28.02.2018 / 18:54