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 é?