Classifique todos os diretórios com base em seu tamanho

5

Gostaria de ordenar todos os diretórios / arquivos em um diretório específico com base em seu tamanho (usando du -sh "name" ).

Eu preciso aplicar esse comando a todos os diretórios no meu local e, em seguida, classificá-los com base nesse resultado. Como posso fazer isso?

    
por user1058398 23.12.2013 / 09:13

3 respostas

7

Com o GNU sort e o GNU du (que parece que você tem, desde que você afirma que está usando a opção du -h ):

du -sh -- *  | sort -rh  # Files and directories, or
du -sh -- */ | sort -rh  # Directories only

A saída é algo como isto:

22G     foo/
21G     bar/
5.4G    baz/
2.1G    qux/
1021M   wibble/
4.0K    wobble/
    
por 23.12.2013 / 09:23
3

Esta é uma versão melhorada baseada na resposta do jabalv. Ele funciona com um GNU e com uma área de usuário BSD.

IFS='\n' du -sk -- * | sort -n | cut -f2 |
while read line ; do
  xargs du -sh "$line"
done

exemplo de saída:

4.0K  games
2.7M  local
6.7M  lib32
19M   sbin
152M  src
177M  include
321M  bin
2.2G  share
2.9G  lib

Para reverter a ordem de classificação e listar os maiores arquivos e diretórios primeiro, use sort -nr .

    
por 23.12.2013 / 11:13
2

Classificando por tamanho de bloco e, em seguida, transformá-lo em legível:

du -sk * | sort -nr | cut -f2 | xargs du -sh
    
por 23.12.2013 / 10:15