Voglio sapere qual è la differenza tra questo
ls | xargs rm
ls | xargs -i{} rm {}
Entrambi lavorano per me
Voglio sapere qual è la differenza tra questo
ls | xargs rm
ls | xargs -i{} rm {}
Entrambi lavorano per me
Risposte:
xargs rminvocherà rmcon tutti gli argomenti come parametro lasciato con spazi.
xargs -i{} rm {}invocherà rm {}per ogni argomento e {}sarà sostituito dall'argomento corrente.
Se hai 2 argomenti a.txte b.txt, xargs rm chiameremo questo
rm a.txt b.txt
Ma xargs -i{} rm {}chiamerà
rm a.txt
rm b.txt
Questo perché l' -iopzione implica -L 1un'opzione che significa che il comando rmprenderà solo una 1riga ogni volta. E qui ogni riga contiene solo 1 argomento.
Controlla questo link Ideone per avere più idea a riguardo.
rmnon importa
L'opzione -i (equivalente a --replace) crea una sorta di segnaposto in cui xargs memorizza l'input appena ricevuto. Nel tuo secondo comando, il segnaposto è "{}", funziona come l'opzione trova -exec. Una volta definiti, xargs sostituirà questo segnaposto con l'intera riga di input. Se non ti piace il nome "{}", puoi definire il tuo:
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
Nel tuo caso, entrambi i comandi stanno producendo lo stesso risultato. Nel secondo modulo, stai semplicemente esplicitando il comportamento predefinito con l'opzione -i.