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

10

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

Na sua falta, uma maneira de obter um tamanho aproximado? Estou pensando que algo dfdesse tipo 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 duparecem levar anos quando um diretório contém milhares de subdiretórios.

Marcus Junius Brutus
fonte
Usar dué o único método que eu conheço. O problema é que os dados estão espalhados por toda a hierarquia e, portanto, precisam ser contabilizados por uma ferramenta para obter as contagens.
Slm

Respostas:

15

Acho que isso é bastante útil.

du -sm Directory

ou para obter uma análise dos diretórios internos

du -sm Directory/*

e depois com um tipo, se tem muitos subdiretórios

du -sm Directory/* | sort -n 

O motivo pelo qual uso a opção -m é garantir que eu receba uma saída em megabytes. Acho que é mais fácil comparar visualmente (quando não estou obtendo 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 em ordem.

Coloque tudo isso em segundo plano e redirecione a saída, levará tempo, qualquer que seja o método usado, é um cruzamento de muitos arquivos que levarão tempo.

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

Observe a ordem inversa para que as grandes estejam no começo. Adicione isso à execução do cron a cada n minutos.

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

export alias ducache='head -n 15 ~/cacheDu.log'
X Tian
fonte
@X Tian ver meu comentário na resposta de Glenn Jackman
Marcus Junius Brutus
Aceitado, é por isso que eu uso -m e classificar
X Tian
3
Lembre-se de shopt -s dotglob, caso contrário du -sm Directory/*, não contará arquivos / diretórios ocultos.
Dmitry Grigoryev
@ XTian desculpe, mas não consegui, então alguns comandos pls ajudam.
precisa saber é o seguinte
Eu peguei a partir daqui #
0100
5
du -sh "$dir"

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


Desde que você estava procurando uma alternativa 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    .
Glenn Jackman
fonte
Obrigado, estou ciente disso, mas duleva muito tempo, pois produz um resultado preciso. Eu esperava uma ferramenta / comando que forneça uma resposta aproximada rápida e suja.
Marcus Junius Brutus
Existe, dfmas isso funciona em todo o sistema de arquivos.
Glenn Jackman
1

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 cron e armazenar o resultado em um arquivo. Então, quando você desejar um valor aproximado, use o valor do arquivo Você decide com que frequência executar o du. 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 muito rapidamente é criar um sistema de arquivos para o diretório, e o df obterá a resposta que você deseja muito rapidamente.

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

Robert Jacobs
fonte
0

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

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

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

PS: head -2É o caso de um subdiretório ocupar todo o lugar do diretório atual e ser ouvido antes do atual.

Nodulaire
fonte