Eu quero saber qual é a diferença entre este
ls | xargs rm
ls | xargs -i{} rm {}
Ambos estão trabalhando para mim
Eu quero saber qual é a diferença entre este
ls | xargs rm
ls | xargs -i{} rm {}
Ambos estão trabalhando para mim
Respostas:
xargs rminvocará rmcom todos os argumentos como parâmetro separado por espaços.
xargs -i{} rm {}invocará rm {}para cada um dos argumentos e {}será substituído pelo argumento atual.
Se você tem 2 argumentos a.txte b.txt, xargs rm chamará este
rm a.txt b.txt
Mas xargs -i{} rm {}vai ligar
rm a.txt
rm b.txt
Isso ocorre porque -ioption implica -L 1option, o que significa que o comando rmterá apenas uma 1linha a cada vez. E aqui cada linha contém apenas 1 argumento.
Verifique este link da Ideone para ter uma idéia melhor.
rmisso não importa
A opção -i (equivalente a --replace) cria um tipo de espaço reservado onde o xargs armazena a entrada que acabou de receber. No seu segundo comando, o espaço reservado é "{}", funciona como a opção find -exec. Uma vez definido, o xargs substituirá esse espaço reservado por toda a linha de entrada. Se você não gostar do nome "{}", poderá definir seu próprio:
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
No seu caso, os dois comandos estão produzindo o mesmo resultado. No segundo formulário, você está apenas explicitando o comportamento padrão com a opção -i.