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 -
printfcom(null byte) separa os elementos um para cada linha-L1 -
a opção
xargsto-0faz com que seja executada uma vez para cada linha de entrada e a opçãobashsepara a entrada no byte nulo: nomes de arquivos podem conter qualquer caractere, o comando doesn ' Não quebre! -
cdremove 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; usarcdtorna o comando$0robusto 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%