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

266

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 , obtenho o tamanho de cada subdiretório e o resumo de todo o sistema de arquivos.

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

    
por 2ndkauboy 11.07.2010 / 19:26

9 respostas

374

Isso faz o que você está procurando:

du -sh /*

O que isso significa:

  • -s para fornecer apenas o total para cada argumento da linha de comandos.
  • -h para sufixos legíveis para humanos, como M para megabytes e G para gigabytes (opcional).
  • /* simplesmente 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.
por 11.07.2010 / 19:28
71

Muitas vezes preciso encontrar os maiores diretórios, então, para obter uma lista classificada contendo os 20 maiores diretórios, faço isso:

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

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

    
por 29.07.2010 / 14:07
15

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

    
por 24.12.2015 / 11:07
9

As respostas existentes são muito úteis, talvez alguns iniciantes (como eu) também achem ú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 demorei um pouco para entender a diferença de * para ./* se estiver em um subdiretório:

    du -sh ./*
    
por 22.11.2012 / 17:53
6

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

du -d 1 /
    
por 11.07.2010 / 19:29
3

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 por humanos no Linux:

du -h | sort -h

Isso vai te enterrar em uma tonelada de arquivos pequenos. 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
    
por 24.07.2015 / 13:04
1

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 devido a blocos diferentes ....

    
por 05.10.2013 / 17:36
0

Você também pode querer verificar o xdiskusage . Irá dar-lhe 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.

    
por 12.07.2010 / 21:42
0

Você 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 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 gerada por ls . Apenas incrementa tot com o tamanho. $5 significa quinta coluna (gerada 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 do sistema, kdirstat pode ser útil!

    
por 20.12.2016 / 10:56