2010-07-11 17:26:29 +0000 2010-07-11 17:26:29 +0000
316
316

Como obter o tamanho resumido dos directórios e dos seus subdirectórios?

Digamos que quero obter o tamanho de cada directório de um sistema de ficheiros Linux. Quando uso o ls -la não consigo obter o tamanho resumido das pastas.

Se uso o df obtenho o tamanho de cada sistema de ficheiros montado, mas isso também não me ajuda. E com o du obtenho o tamanho de cada subdirectório e o resumo de todo o sistema de ficheiros.

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

Respostas (9)

450
450
450
2010-07-11 17:28:23 +0000

Isto faz o que se procura:

du -sh /*

O que isto significa:

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

Também é útil ordenar por tamanho:

du -sh /* | sort -h

Aqui:

  • -h assegura que sort interpreta correctamente os sufixos legíveis por humanos.
84
84
84
2010-07-29 12:07:31 +0000

Preciso frequentemente de encontrar os maiores directórios, por isso para obter uma lista ordenada contendo os 20 maiores dirs faço isto:

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

Neste caso os tamanhos serão reportados em megabytes.

24
24
24
2015-12-24 10:07:52 +0000

Gosto de usar Ncdu para isso, você pode usar o cursor para navegar e perfurar através da estrutura de diretórios que ele funciona muito bem.

12
12
12
2012-11-22 16:53:04 +0000

As respostas existentes são muito úteis, talvez alguns principiantes (como eu) também o considerem útil.

  1. Um loop muito básico, mas para mim este foi um bom começo para algumas operações relacionadas com outras dimensões:

  2. Muito semelhante à primeira resposta e quase o mesmo resultado do 1.), mas demorei algum tempo a perceber a diferença de * para ./* se numa subdirectoria:

9
9
9
2010-07-11 17:29:10 +0000

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

du -d 1 /
5
5
5
2015-07-24 11:04:13 +0000

Isto não é fácil. O comando du mostra ficheiros e pastas (por defeito) ou apenas os tamanhos de todos os itens que especifica na linha de comando (opção -s).

Para obter os itens maiores (ficheiros e pastas), ordenados, com tamanhos legíveis por humanos no Linux:

du -h | sort -h

Isto irá enterrá-lo numa tonelada de pequenos ficheiros. Pode livrar-se deles com --threshold (1 MB no meu exemplo):

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

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

Se realmente só quer as pastas, precisa de usar find mas isto pode ser muito, muito lento uma vez que du terá de digitalizar muitas pastas várias vezes:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h
2
2
2
2013-10-05 15:36:58 +0000

Tenha em atenção, que não pode comparar directórios com du em diferentes sistemas/máquinas sem ter a certeza, ambos partilham o mesmo tamanho de blocos do sistema de ficheiros. Isto pode contar se fizer rsync a alguns ficheiros de uma máquina linux para uma nas e quiser comparar a directoria sincronizada por si próprio. Pode obter resultados diferentes com du devido a diferentes tamanhos de blocos….

1
1
1
2010-07-12 19:42:17 +0000

Poderá também querer consultar xdiskusage . Irá dar-lhe a mesma informação, mas mostrada graficamente, além de permitir fazer drill down (muito útil). Existem outros utilitários semelhantes para o KDE e mesmo para o Windows.

1
1
1
2016-12-20 09:56:34 +0000

Pode 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 começa a processar os dados. O delimitador padrão é o espaço. A variável soma tot é inicializada a zero; a seguinte declaração é executada para cada linha/linha produzida por ls. A variável tot apenas incrementa $5 com a dimensão. ls representa a quinta coluna (produzida por kdirstat). No final dividimos por (1024*1024) para somar em megabytes.

Se quiser converter isto num script ou função (.bashrc) também pode utilizá-lo para obter o tamanho de certos subconjuntos de directórios, de acordo com os tipos de ficheiros.

Se quiser informação alargada do sistema, &007 pode vir a ser útil!