Não funciona porque xargs executa seu comando diretamente. Não aceita uma linha de código de shell e passa o comando ao shell para executar. De fato, todos os && s estão sendo interpretados pelo shell antes de ls e xargs serem executados. Além disso, {} é uma construção que find entende, não xargs .
(Você pode usar -I com xargs para imitar esse recurso de find , se você quiser.)
A maneira mais simples de fazer isso com xargs é colocar seu comando em um script de shell:
#!/bin/sh
echo "Looking at $1"
cd $1
/bin/do_stuff
(Eu substituí efetivamente seu && por ; , pois parece que echo e cd não podem falhar, contanto que você execute isso em um diretório que contenha apenas outros subdiretórios. Se você precisar " e "comportamento, a correção necessária para o script é óbvia.)
Em seguida, execute esse script de shell por meio de xargs . Se você chamou de dostuff.sh :
$ ls | xargs ./dostuff.sh
dostuff.sh precisa ser marcado como executável, como acontece com chmod +x dostuff.sh .
Provavelmente, existe uma maneira de escrever tudo isso em uma única linha com sh -c , mas se você não se lembra da mágica para fazer isso, é apenas uma curiosidade, não é?