Acredite ou não, você pode fazer isso com find
e du
. Eu usei uma técnica semelhante que escrevi no meu blog um pouco. Esse artigo é intitulado: [one-liner ]: Calculando o uso do espaço em disco para uma lista de arquivos usando o du no Linux .
A essência desse post é um comando como este:
$ find -maxdepth 2 -type f | tr '\n' '$ find -maxdepth 2 -type f | tr '\n' '--files0-from=F
summarize disk usage of the NUL-terminated file names specified in
file F; If F is - then read names from standard input
' | du -ch --files0-from=- | tail -10
0 ./92086/2.txt
0 ./92086/5.txt
0 ./92086/14.txt
0 ./92086/19.txt
0 ./92086/18.txt
0 ./92086/17.txt
4.0K ./load.bash
4.0K ./100855/plain.txt
4.0K ./100855/tst_ccmds.bash
21M total
' | du -ch --files0-from=-
Exemplo
Isso listará o tamanho de todos os arquivos junto com um total de resumo.
du: cannot access './101415/fileD': No such file or directory
du: cannot access 'E': No such file or directory
OBSERVAÇÃO: Essa solução requer que du
suporte a opção --files0-from=
, que é um switch GNU, que eu saiba.
trecho da página du man
$ find -maxdepth 2 -type f -print0 | du -ch --files0-from=- | tail -10
0 ./92086/2.txt
0 ./92086/5.txt
0 ./92086/14.txt
0 ./92086/19.txt
0 ./92086/18.txt
0 ./92086/17.txt
4.0K ./load.bash
4.0K ./100855/plain.txt
4.0K ./100855/tst_ccmds.bash
21M total
Além disso, esse método sofre com a impossibilidade de lidar com caracteres especiais em nomes de arquivos, como espaços e não-imprimíveis.
Exemplos
$ find -maxdepth 2 -type f | tr '\n' '$ find -maxdepth 2 -type f | tr '\n' '--files0-from=F
summarize disk usage of the NUL-terminated file names specified in
file F; If F is - then read names from standard input
' | du -ch --files0-from=- | tail -10
0 ./92086/2.txt
0 ./92086/5.txt
0 ./92086/14.txt
0 ./92086/19.txt
0 ./92086/18.txt
0 ./92086/17.txt
4.0K ./load.bash
4.0K ./100855/plain.txt
4.0K ./100855/tst_ccmds.bash
21M total
' | du -ch --files0-from=-
Isso pode ser resolvido com a introdução de mais comandos tr .. ..
para substituí-los por caracteres alternativos. No entanto, existe uma maneira melhor, se você tiver acesso ao find
do GNU.
Melhorias
Se a sua versão de find
oferecer a opção --print0
, você poderá usar esse encantamento que lida com arquivos que possuem espaços e / ou caracteres especiais que não podem ser impressos.
du: cannot access './101415/fileD': No such file or directory
du: cannot access 'E': No such file or directory