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 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 .
rmes 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.