Encontre o tamanho dos diretórios recursivamente e obtenha um total

2

Estou usando este comando para encontrar as pastas desejadas e contar o tamanho.

find . -type d -name 'tmp_c*' | xargs du -hcs {} \; + 

Minha versão do find não é compatível com -exec. Mas isso funciona. No entanto, não tenho certeza se está me dando os totais corretos nos diretórios que contêm minha string de pesquisa. Quando executo o comando e o pipe para menos, vejo a contagem do tamanho de cada pasta e, em seguida, gera um total de vez em quando. Assim:

140K    ./r/g/userid/attach/tmp_c_241091464_2
68K     ./r/g/userid/attach/tmp_c_58367014_undefined
2.3G    total

Se eu redirecionar a saída para um arquivo, em seguida, o grep no total, recebo isso:

2.3G    total
978M    total
1.1G    total
2.0G    total
1.1G    total

Eu acho que isso está me dando os números certos. Mas como eu posso levar este comando um passo adiante e fazer com que ele some os totais para um total geral em uma linha?

    
por user53029 28.10.2016 / 19:50

4 respostas

1

find . -type d -name 'tmp_c*' -print0 | du -hcs --files0-from -

Isso pressupõe (recente o suficiente?) versões GNU de find e du .

    
por 28.10.2016 / 19:56
1

Isso deve funcionar, testado na minha caixa EL4 ... é o mais antigo que tenho e me faz estremecer, não sei como você usa o EL3.

find . -type d -name 'tmp_c*' -print0|xargs -0 du -c|tail -1

Feito com coreutils-4.5.3-26

    
por 28.10.2016 / 20:57
1

link

One alternate solution is to use awk:

mas o script deve ser adaptado para este caso, tente

find . -type d -name 'tmp_c*' -print0 | xargs -0 du -s | awk 'BEGIN { sum=0 } { sum+=$1 } END { print sum }'

a saída será em decimal

    
por 28.10.2016 / 20:23
0

Eu verifiquei epel começa em 5 não 3, por isso só opção é script personalizado.

Também pode instalar o ncdu;

link

Eu uso isso o tempo todo, muito mais fácil, mais rápido do que qualquer bash personalizado. (Pode navegar pelos dirs, economiza muito tempo).

    
por 28.10.2016 / 20:44