Ich möchte wissen, was der Unterschied ist
ls | xargs rm
ls | xargs -i{} rm {}
Beide arbeiten für mich
Ich möchte wissen, was der Unterschied ist
ls | xargs rm
ls | xargs -i{} rm {}
Beide arbeiten für mich
Antworten:
xargs rm
wird rm
mit allen Argumenten als Parameter aufgerufen, die mit Leerzeichen angegeben wurden.
xargs -i{} rm {}
wird rm {}
für jedes Argument aufgerufen und {}
durch das aktuelle Argument ersetzt.
Wenn Sie 2 Argumente haben a.txt
und b.txt
, xargs rm
wird dies aufgerufen
rm a.txt b.txt
Werde xargs -i{} rm {}
aber anrufen
rm a.txt
rm b.txt
Dies liegt daran, dass die -i
Option eine Option impliziert, -L 1
was bedeutet, dass der Befehl jedes Mal rm
nur eine 1
Zeile benötigt. Und hier enthält jede Zeile nur 1 Argument.
Überprüfen Sie diesen Ideone-Link , um mehr darüber zu erfahren .
rm
es spielt keine Rolle
Die Option -i (entspricht --replace) erstellt eine Art Platzhalter, in dem xargs die soeben erhaltene Eingabe speichert. In Ihrem zweiten Befehl lautet der Platzhalter "{}" und funktioniert wie die Option find -exec. Einmal definiert, ersetzt xargs diesen Platzhalter durch die gesamte Eingabezeile. Wenn Ihnen der Name "{}" nicht gefällt, können Sie Ihren eigenen definieren:
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
In Ihrem Fall führen beide Befehle zu demselben Ergebnis. Im zweiten Formular legen Sie lediglich das Standardverhalten mit der Option -i fest.