Se puder, use find
como sugerido em outras respostas, xargs
é quase sempre para ser evitado.
Mas se você ainda quiser usar xargs
, uma alternativa possível é a seguinte:
printf '%sprintf '%s%pre%' */ | xargs -0 -L1 bash -c 'cd -- "$1" && pwd' _
' */ | xargs -0 -L1 bash -c 'cd -- "$1" && pwd' _
Algumas notas:
-
*/
expande para a lista de diretórios na pasta atual, graças à barra final -
printf
com
(null byte) separa os elementos um para cada linha-L1
-
a opção
xargs
to-0
faz com que seja executada uma vez para cada linha de entrada e a opçãobash
separa a entrada no byte nulo: nomes de arquivos podem conter qualquer caractere, o comando doesn ' Não quebre! -
cd
remove as aspas duplas e as passa para o script embutido como um único parâmetro, mas--
deve colocar aspas duplas novamente para interpretá-las como uma única string; usarcd
torna o comando$0
robusto contra nomes de arquivos que começam com um hífen -
para evitar o uso estranho de
_
como parâmetro, é comum colocar um primeiro argumento simulado %code%