Chcę wiedzieć, jaka jest różnica między tym
ls | xargs rm
ls | xargs -i{} rm {}
Oba pracują dla mnie
Chcę wiedzieć, jaka jest różnica między tym
ls | xargs rm
ls | xargs -i{} rm {}
Oba pracują dla mnie
Odpowiedzi:
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 znaczenia
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.