xargs rm
wird rm
aufrufen mit allen Argumenten als Parameter mit Leerzeichen.
xargs -i{} rm {}
wird rm {}
aufrufen für jedes Argument und {}
wird durch das aktuelle Argument ersetzt.
Wenn Sie 2 Argumente haben a.txt
und b.txt
, xargs rm
wird dies aufrufen
rm a.txt b.txt
Aber xargs -i{} rm {}
wird
rm a.txt
rm b.txt
Das liegt daran, dass -i
Option impliziert -L 1
Option, die den Befehl rm
bedeutet dauert nur 1
Zeile jedes Mal. Und hier enthält jede Zeile nur 1 Argument.
Überprüfen Sie diesen Ideone-Link, um mehr darüber zu erfahren.
Mit geschweiften Klammern wird ein rm
erzeugt Prozess pro Datei. Ohne die geschweiften Klammern xargs
so viele Dateinamen wie möglich an jeden rm
übergeben Befehl.
Vergleiche
ls | xargs echo
und
ls | xargs -i echo '{}'
Die Option -i (entspricht --replace) erstellt eine Art Platzhalter, in dem xargs die gerade empfangene Eingabe speichert. In Ihrem zweiten Befehl ist der Platzhalter "{}", er 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 einen eigenen definieren:
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
In Ihrem Fall führen beide Befehle zum gleichen Ergebnis. In der zweiten Form machen Sie nur das Standardverhalten mit der Option -i explizit.