Obtendo o tamanho com apenas um dos arquivos

41

Como posso obter o tamanho de todos os arquivos e todos os arquivos em seus subdiretórios usando o comando du.

Estou tentando o seguinte comando para obter o tamanho de todos os arquivos (e arquivos em subdiretórios)

find . -type f | du -a

Mas isso também imprime os tamanhos das pastas. Como posso obter uma listagem de tamanhos de todos os arquivos e arquivos em subdiretórios? Eu também tentei o exec flag , mas não sei como canalizar a saída para outro comando depois que ele executa os resultados de find em du .

Desculpe, deve ter mencionado isso antes, o sistema operacional é o AIX 6.1 com o shell ksh.

Obrigado.

    
por Shardul Upadhyay 11.10.2011 / 21:12

4 respostas

45

Eu geralmente uso o utilitário -exec . Assim:

find . -type f -exec du -a {} +

Eu tentei tanto no bash quanto no ksh com o GNU find. Eu nunca tentei o AIX, mas tenho certeza que sua versão do find tem alguma sintaxe -exec .

O snippet a seguir classifica a lista, a maior em primeiro lugar:

find . -type f -exec du -a {} + | sort -n -r | less
    
por 11.10.2011 / 23:52
15

Se você tem utilitários GNU, tente

find . -type f -print0 | du --files0-from=-
    
por 11.10.2011 / 21:43
8

Eu geralmente uso:

find . -type f -print0 | xargs -r0 du -a

Xargs geralmente chama o comando, mesmo se não houver argumentos passados; xargs du </dev/null ainda será chamado, xargs -r du </dev/null não chamará du. O argumento -0 procura sequências terminadas com nulo em vez de novas linhas terminadas.

Então, costumo adicionar | awk '{sum+=$1} END {print sum}' no final para obter o total.

    
por 11.10.2011 / 22:08
2

Aqui está uma versão com nomes de parâmetros longos e classificação humana.

find . -type f -exec du --human {} + | sort --human --reverse | head

Eu também não vi necessidade de -a/--all ser passado para du .

    
por 07.12.2015 / 11:00