Por padrão xargs
irá concatenar muitas linhas de sua entrada e passar então para o comando especificado. Por exemplo:
echo -e 'line 1\nline 2\nline 3' | xargs echo
resulta em
line 1 line 2 line 3
Já que os argumentos são enviados para um único comando de eco (dentro dos limites do comprimento da linha de comando).
Às vezes, você quer usar a string de substituição para colocar os argumentos em outro lugar no comando, em vez do final:
echo -e 'line 1\nline 2\nline 3' | xargs -Ix echo x DONE
line 1 DONE
line 2 DONE
line 3 DONE
Agora, os xargs só substituem um argumento por cada chamada de eco, porque, como diz a página man, "-I implica -L 1 ...". Esse é provavelmente o comportamento certo para um caso típico, mas existe alguma maneira de substituí-lo, então eu recebo line 1 line 2 line 3 DONE
como a saída?
Por favor, note que o meu exemplo é apenas ilustrativo - não estou muito interessado em maneiras não-xargs de abordar esta questão.
Converter novas linhas em
\nul
terminadores, então usexargs -0
fonte
line 1 DONE line 2 DONE ...
Se eu entendi sua pergunta, acho que você só quer converter novas linhas para um não delimitador.
fonte
ls | tr '\n' ' ' | xargs -I{} echo {} DONE
rendimentosdir1/ dir2/ dir3/ DONE
.