cosa è diff bentween xargs con parentesi graffe e senza in Linux


18

Voglio sapere qual è la differenza tra questo

ls | xargs rm

ls | xargs -i{} rm {}

Entrambi lavorano per me

Risposte:


19

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.


QUALE È MEGLIO

1
@ user19140477031 dipende da quale operazione si sta eseguendo. poiché rmnon importa
Shiplu Mokaddim del

3

Con le parentesi graffe genererà un rmprocesso per file. Senza le parentesi graffe, xargspasserà il maggior numero di nomi di file possibile a ciascun rmcomando.

Confrontare

ls | xargs echo

e

ls | xargs -i echo '{}'

2

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.