obtém o tamanho aproximado do diretório (incluindo recursivamente todos os arquivos e subdiretórios)

9

Existe uma maneira de obter rapidamente um tamanho preciso para um diretório (incluindo, recursivamente, todos os seus subdiretórios)? Eu não quero os tamanhos dos subdiretórios, apenas quero dizer que eles devem ser recursivamente incluídos no tamanho total relatado.

Falhando nisso, uma maneira de obter um tamanho aproximado? Estou pensando em algo ao longo das linhas de df que produz uma resposta rápida para todo o sistema de arquivos, mas desta vez para um diretório específico (e seus subdiretórios).

As soluções que usam du parecem demorar quando um diretório contém milhares de subdiretórios.

    
por Marcus Junius Brutus 10.02.2014 / 23:05

4 respostas

13

Acho isso muito útil.

du -sm Directory

ou para obter um detalhamento dos diretórios internos

du -sm Directory/*

e, em seguida, com um tipo, se ele tiver muitos subdiretórios

du -sm Directory/* | sort -n 

O motivo pelo qual eu uso a opção -m é garantir que receba uma saída de megabytes. Acho que é mais fácil para mim comparar visualmente (quando não estou conseguindo uma mistura de unidades, por exemplo, comparar 999 KB e 1MB vs 999000MB e 1000000MB), o benefício adicional é que você pode passar a saída para a classificação.

Coloque tudo em segundo plano e redirecione a saída, isso levará algum tempo com o método que se usa, é uma travessia de muitos arquivos que levará tempo.

du -sm Directory/* | sort -nr > ~/cacheDu.log &

Anote o tipo reverso para que os grandes estejam no começo. Adicione isto ao cron executado a cada n mins.

Depois, com um alias ducache, você tem um uso de diretório bastante atualizado.

export alias ducache='head -n 15 ~/cacheDu.log'
    
por 10.02.2014 / 23:11
5
du -sh "$dir"

fornecerá um resumo do tamanho total na saída formatada "humana".

Como você estava procurando uma alternativa para du , tentei find , mas é exatamente o mesmo:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .
    
por 10.02.2014 / 23:11
0

Você pode não gostar da minha resposta, mas acho que a melhor maneira de fazer o que você quer é executar o "du -s" em segundo plano regularmente usando o cron e armazenar o resultado em um arquivo. Então, quando você quiser um valor aproximado, use o valor do arquivo. Você decide com que frequência rodar o du. Eu não vejo uma maneira mais rápida de obter o valor. O comando du é eficiente para o que faz.

A única outra maneira de fazer isso rapidamente é criar um sistema de arquivos para o diretório, e o df fará a resposta que você deseja rapidamente.

Se for mais rápido saber tudo no sistema de arquivos, exceto seu diretório, você poderá executar df para o sistema de arquivos, du para tudo que não seja seu diretório e subtrair.

    
por 11.02.2014 / 15:12
0

Não se ajusta exatamente às suas necessidades (e não à impressão de uma linha), mas é mais fácil do que outras soluções:

du -a -h | sort -hr | head -2

Este comando fornecerá o tamanho do diretório e do subdiretório e o tamanho do arquivo ou subdiretório mais grande no diretório atual.

PS: O head -2 está no caso de um subdiretório ocupar todo o lugar do diretório atual e ser escutado antes do atual.

    
por 07.10.2015 / 10:01

Tags