was ist diff bentween xargs mit geschweiften Klammern und ohne in Linux

18

Ich möchte wissen, was der Unterschied ist

ls | xargs rm

ls | xargs -i{} rm {}

Beide arbeiten für mich


quelle

Antworten:

19

xargs rmwird rmmit 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.txtund 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 -iOption eine Option impliziert, -L 1was bedeutet, dass der Befehl jedes Mal rmnur eine 1Zeile benötigt. Und hier enthält jede Zeile nur 1 Argument.

Überprüfen Sie diesen Ideone-Link , um mehr darüber zu erfahren .

Shiplu Mokaddim
quelle
WAS BESSER IST
1
@ user19140477031 hängt davon ab, welchen Vorgang Sie ausführen. denn rmes spielt keine Rolle
Shiplu Mokaddim
3

Mit geschweiften Klammern wird ein rmProzess pro Datei erzeugt. Ohne geschweifte Klammern xargswerden so viele Dateinamen wie möglich an jeden rmBefehl übergeben.

Vergleichen Sie

ls | xargs echo

und

ls | xargs -i echo '{}'
kmkaplan
quelle
2

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.

aag
quelle