Chcę wiedzieć, jaka jest różnica między tym
ls | xargs rm
ls | xargs -i{} rm {}
Oba pracują dla mnie
xargs rm
będzie wywoływał rm
ze 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.txt
i 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ż -i
opcja implikuje -L 1
opcję, co oznacza, że polecenie rm
będzie za 1
każ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.
rm
to nie ma znaczeniaZ nawiasami klamrowymi spawnuje jeden
rm
proces na plik. Bez nawiasów klamrowychxargs
przekaże jak najwięcej nazw plików do każdegorm
polecenia.Porównać
i
źródło
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:
W twoim przypadku oba polecenia dają ten sam wynik. W drugim formularzu po prostu podajesz domyślne zachowanie za pomocą opcji -i.
źródło