co jest różnicą wygiętą między xargs z nawiasami klamrowymi i bez w linuksie

19

Chcę wiedzieć, jaka jest różnica między tym

ls | xargs rm

ls | xargs -i{} rm {}

Oba pracują dla mnie


źródło

Odpowiedzi:

19

xargs rmbędzie wywoływał rmze wszystkimi argumentami jako parametr odszedł spacjami.

xargs -i{} rm {}wywoła rm {}każdy argument i {}zostanie zastąpiony bieżącym argumentem.

Jeśli masz 2 argumenty a.txti b.txt, xargs rm wywoła to

rm a.txt b.txt

Ale xargs -i{} rm {}zadzwoni

rm a.txt
rm b.txt

Jest tak, ponieważ -iopcja implikuje -L 1opcję, co oznacza, że ​​polecenie rmbędzie za 1każdym razem przyjmowało tylko wiersz. I tutaj każda linia zawiera tylko 1 argument.

Sprawdź ten link Ideone, aby uzyskać więcej informacji na ten temat.

Shiplu Mokaddim
źródło
KTÓRE JEST LEPSZE
1
@ user19140477031 zależy od tego, jaką operację wykonujesz. bo rmto nie ma znaczenia
Shiplu Mokaddim
3

Z nawiasami klamrowymi spawnuje jeden rmproces na plik. Bez nawiasów klamrowych xargsprzekaże jak najwięcej nazw plików do każdego rmpolecenia.

Porównać

ls | xargs echo

i

ls | xargs -i echo '{}'
kmkaplan
źródło
2

Opcja -i (odpowiednik --replace) tworzy rodzaj symbolu zastępczego, w którym xargs przechowuje właśnie otrzymane dane wejściowe. W drugim poleceniu symbolem zastępczym jest „{}”, działa jak opcja find -exec. Po zdefiniowaniu xargs zastąpi ten symbol zastępczy całą linią wprowadzania. Jeśli nie podoba Ci się nazwa „{}”, możesz zdefiniować własne:

ls | xargs -iPLACEHOLDER echo PLACEHOLDER

W twoim przypadku oba polecenia dają ten sam wynik. W drugim formularzu po prostu podajesz domyślne zachowanie za pomocą opcji -i.

aag
źródło