Lista de tubulações de arquivos e diretórios para du apenas mostra tamanhos de diretórios?

1

Digamos que eu tenha um diretório com vários subdiretórios, cada um contendo alguns arquivos:

1/a.txt
1/b.txt
2/c.txt
2/d.txt
3/e.txt
3/f.txt

Eu quero ver o tamanho de cada arquivo. Lembre-se, sei que existem maneiras mais fáceis e diretas de fazer isso, como du -a . Eu só quero saber por que o seguinte não funciona, para fins educacionais.

Meu exercício inútil

A execução de find . retorna uma lista de todos os arquivos e diretórios, por isso tentei canalizá-lo assim:

find . | xargs du

mas isso apenas retorna os tamanhos dos diretórios 1, 2 e 3. Eu estou perdendo um pouco de entendimento, porque na minha mente xargs deveria estar mapeando cada linha de saída de find para uma chamada para du .


Se ao invés disso eu uso:

find . | xargs du -a

funcionará como esperado, listando os tamanhos de todos os arquivos e diretórios. Ele também funciona bem se eu apenas passar uma lista de arquivos usando a opção -type f , então é algo a ver com o recebimento de uma lista de diretórios misturados com arquivos.

O que está acontecendo aqui?

    
por philraj 20.08.2016 / 19:30

1 resposta

3

O que está acontecendo é que xargs coloca (se puder) todos os nomes em uma linha de comando, para que você veja apenas um comando passado para du . Então du ignora os nomes dos arquivos (como você poderia esperar: os arquivos são parte dos diretórios e não os contará duas vezes).

Se você usar um parâmetro -n 1 para xargs , ele dividirá o comando e você verá algo mais conforme o esperado.

    
por 20.08.2016 / 19:34