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).