web-dev-qa-db-pt.com

Como obter os tamanhos resumidos de diretórios e seus subdiretórios?

Digamos que eu queira obter o tamanho de cada diretório de um sistema de arquivos do Linux. Quando eu uso ls -la eu realmente não obtenho o tamanho resumido das pastas.

Se eu usar df, obtenho o tamanho de cada sistema de arquivos montado, mas isso também não me ajuda. E com du eu recebo o tamanho de cada subdiretório e o resumo de todo o sistema de arquivos.

Mas eu quero ter apenas o tamanho resumido de cada diretório dentro da pasta ROOT do sistema de arquivos. Existe algum comando para conseguir isso?

286
2ndkauboy

Isso faz o que você está procurando:

du -sh /*

O que isto significa:

  • -s para dar apenas o total para cada argumento de linha de comando.
  • -h para sufixos legíveis para humanos, como M para megabytes e G para gigabytes (opcional).
  • /* simplesmente se expande para todos os diretórios (e arquivos) em /.

    Nota: dotfiles não estão incluídos; execute shopt -s dotglob para incluí-los também.

Também é útil classificar por tamanho:

du -sh /* | sort -h

Aqui:

  • -h garante que sort interprete os sufixos legíveis corretamente.
407
Thomas

Eu frequentemente preciso encontrar os maiores diretórios, então para obter uma lista ordenada contendo os 20 maiores diretórios eu faço isso:

du -m /some/path | sort -nr | head -n 20

Nesse caso, os tamanhos serão relatados em megabytes.

74
Janne Pikkarainen

Eu gosto de usar Ncdu para isso, você pode usar o cursor para navegar e detalhar a estrutura de diretórios que funciona muito bem.

18
BuddhaLincoln

As respostas existentes são muito úteis, talvez algum iniciante (como eu) também ache isso útil.

  1. Loop muito básico, mas para mim isso foi um bom começo para outras operações relacionadas ao tamanho:

    for each in $(ls) ; do du -hs "$each" ; done
    
  2. Muito semelhante à primeira resposta e quase o mesmo resultado de 1.), mas levei algum tempo para entender a diferença de * para ./* se em um subdiretório:

    du -sh ./*
    
10
Martin

A seguinte invocação du deve funcionar em sistemas BSD:

du -d 1 /
7
Philipp

Isso não é fácil. O comando du mostra arquivos e pastas (padrão) ou apenas os tamanhos de todos os itens especificados na linha de comando (opção -s).

Para obter os maiores itens (arquivos e pastas), classificados, com tamanhos legíveis em humanos no Linux:

du -h | sort -h

Isso vai te enterrar em uma tonelada de pequenos arquivos. Você pode se livrar deles com --threshold (1 MB no meu exemplo):

du --threshold=1M -h | sort -h

A vantagem deste comando é que ele inclui pastas de pontos ocultos (pastas que começam com .).

Se você realmente quer apenas as pastas, você precisa usar find, mas isso pode ser muito, muito lento, já que du terá que varrer muitas pastas várias vezes:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h
4
Aaron Digulla

Esteja ciente de que você não pode comparar diretórios com du em sistemas/máquinas diferentes sem ter certeza, ambos compartilham o mesmo tamanho de bloco do sistema de arquivos. Isso pode contar se você rsync alguns arquivos de uma máquina linux para um nas e você deseja comparar o diretório sincronizado em seu próprio país. Você pode obter resultados diferentes com du por causa de blocos diferentes ....

1
Jimmy Koerting

Você poderia usar ls em conjunto com awk:

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

A saída de ls é canalizada para awk. awk inicia o processamento dos dados. O delimitador padrão é o espaço. A variável de soma tot é inicializada para zero; a seguinte declaração é executada para cada linha/linha produzida por ls. Apenas incrementa tot com o tamanho. $5 significa quinta coluna (produzida por ls). No final, dividimos por (1024 * 1024) para somar em megabytes.

Se você converter isso em um script ou função (.bashrc), você também pode usá-lo para obter o tamanho de certos subconjuntos de diretórios, de acordo com tipos de arquivos.

Se você quiser informações de todo o sistema, kdirstat pode ser útil!

0
J.M. Stoorvogel

Você também pode querer verificar xdiskusage . Vai lhe dar a mesma informação, mas mostrada graficamente, mais permite detalhar (muito útil). Existem outros utilitários semelhantes para o KDE e até para o Windows.

0
sleske