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 rm
invocherà rm
con 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.txt
e 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' -i
opzione implica -L 1
un'opzione che significa che il comando rm
prenderà solo una 1
riga ogni volta. E qui ogni riga contiene solo 1 argomento.
Controlla questo link Ideone per avere più idea a riguardo.
rm
non 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.