Exibir cada tamanho de subdiretório em um formato de lista usando um comando de linha no Bash?

100

Quero obter uma lista dos diretórios e seus tamanhos em um formato de lista, como você obtém quando faz um ls -l.

O problema é que existe um comando de uma linha que pode fazer isso? Vejo que outros têm comandos longos apenas para produzir isso. Isso é muito longo.

Que comando pode fazer isso ou a combinação de comandos que podem ser facilmente digitados? du -hdá, mas exibe todas as subpastas que não é o que eu quero. apenas as pastas de diretórios atuais.

Patoshi パ ト シ
fonte

Respostas:

71

Você provavelmente deseja ver os diretórios ordenados por tamanho:

$ du -hs * | sort -hr

856M    lib
746M    share
612M    lib64
312M    src
267M    java
239M    bin
179M    sbin
173M    local
93M     i686-w64-mingw32
72M     libexec
26M     include
20M     puppet
772K    X11R6
20K     man
4.0K    games
4.0K    etc
0       tmp
raychi
fonte
Isso não funciona se houver um grande número de entradas no diretório. bash: /run/current-system/sw/bin/du: Argument list too long
Chris Stryczynski
123

Tente isto

du -h --max-depth=1

Resultado

oliver@home:/usr$ sudo du -h --max-depth=1
24M     ./include
20M     ./sbin
228M    ./local
4.0K    ./src
520M    ./lib
8.0K    ./games
1.3G    ./share
255M    ./bin
2.4G    .

Alternativa

Se --max-depth=1for um pouco longo para o seu gosto, você também pode tentar usar:

du -h -s *

Isso usa -s( --summarize) e imprime apenas o tamanho da própria pasta por padrão. Ao passar todos os elementos no diretório de trabalho atual ( *), ele produz uma saída semelhante à --max-depth=1:

Resultado

oliver@cloud:/usr$ sudo du -h -s *
255M    bin
8.0K    games
24M     include
520M    lib
0       lib64
228M    local
20M     sbin
1.3G    share
4.0K    src

A diferença é sutil. A abordagem anterior exibirá o tamanho total do diretório de trabalho atual e o tamanho total de todas as pastas nele contidas ... mas apenas até 1 profundidade.

A última abordagem calculará o tamanho total de todos os itens passados individualmente . Portanto, inclui o link simbólico lib64na saída, mas exclui os itens ocultos (cujo nome começa com um ponto). Também não possui o tamanho total do diretório de trabalho atual, pois isso não foi passado como argumento.

Der Hochstapler
fonte
4
Resposta perfeita. No Mac OSX, o --depthparâmetro não é reconhecido. Use du -h -d 1para o mesmo resultado.
Dylan
6

Imprima os tamanhos de todas as pastas de arquivos e arquivos ocultos no disco:

el@dev /home/el $ du -sh `ls -a`
258M    .
265M    ..
4.0K    .classpath
258M    .git
4.0K    .gitignore
9.0K    nbactions.xml
12K     README
20K     .README.swp
4.0K    run.sh
23K    XmlPostPropagate.php
Eric Leschinski
fonte
2
Mas cuidado! Por que você não deve analisar a saída de ls (1)
Kamil Maciorowski
2

Vale mencionar o comando do shell NCurses Disk Usage .

Ncdu é um analisador de uso de disco com uma interface ncurses. Ele foi projetado para encontrar porcos espaciais em um servidor remoto, onde você não tem uma configuração gráfica completa disponível, mas é uma ferramenta útil, mesmo em sistemas de desktop comuns. O Ncdu pretende ser rápido, simples e fácil de usar, e deve poder rodar em qualquer ambiente mínimo do tipo POSIX com o ncurses instalado.

Raio
fonte