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