Por que o uso de xargs falhou nesse caso?

4

Eu tentei entender o uso de xargs e fiz o seguinte experimento.

ls | xargs | touch

Eu quero atualizar as datas e diretórios dos arquivos no diretório atual.

Apesar de ser um pouco bobo , eu poderia usar uma forma mais simples para conseguir o mesmo efeito.

Na minha opinião, xargs lê o STDIN e o transforma nos argumentos do outro comando ( /bin/echo por padrão, se o comando não for especificado). Eu estou entendendo mal alguma coisa?

Ele falhou e estou me perguntando por que.

    
por xiaohan2012 15.12.2011 / 02:18

1 resposta

8

Precisa ser assim:

ls | xargs touch

O comando xargs executa o comando touch com um número de cadeias lidas de stdin. No seu caso, stdin para xargs é o final de saída do pipe de ls .

A maneira como você tinha o comando:

ls | xargs | touch

xargs não tinha comando para executar nas cadeias de caracteres (nomes de arquivos) que leria de stdin. Nesse caso, xargs simplesmente imprime cada nome de arquivo e touch obtém a lista de nomes de arquivos em sua entrada padrão. Mas touch não lê sua entrada padrão, e desde que você não deu nenhum argumento, ele deveria ter impresso uma mensagem de erro como:

touch: missing file operand
Try 'touch --help' for more information.

(que você deveria ter mencionado em sua pergunta).

    
por 15.12.2011 / 02:50