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?
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.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.
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.
As respostas existentes são muito úteis, talvez algum iniciante (como eu) também ache isso útil.
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
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 ./*
A seguinte invocação du
deve funcionar em sistemas BSD:
du -d 1 /
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
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 ....
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!
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.