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

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 .


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 '{}'

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.