xargs rm
vyvolá rm
se všemi argumenty jako parametrem s mezerami.
xargs -i{} rm {}
vyvolá rm {}
pro každý z argumentů a {}
bude nahrazeno aktuálním argumentem.
Pokud máte 2 argumenty a.txt
a b.txt
, xargs rm
zavolá toto
rm a.txt b.txt
Ale xargs -i{} rm {}
zavolá
rm a.txt
rm b.txt
Důvodem je -i
volba implikuje -L 1
volba, což znamená příkaz rm
zabere pouze 1
řádek pokaždé. A zde každý řádek obsahuje pouze 1 argument.
Podívejte se na tento odkaz Ideone, abyste o tom získali další představu.
Se složenými závorkami vytvoří jeden rm
proces na soubor. Bez složených závorek, xargs
předá každému rm
co nejvíce názvů souborů příkaz.
Porovnat
ls | xargs echo
a
ls | xargs -i echo '{}'
Volba -i (ekvivalent --replace) vytváří jakýsi zástupný symbol, kam xargs ukládá vstup, který právě přijal. Ve vašem druhém příkazu je zástupný symbol "{}", funguje to jako volba find -exec. Po definování nahradí xargs tento zástupný symbol celým řádkem vstupu. Pokud se vám nelíbí název "{}", můžete si definovat vlastní:
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
Ve vašem případě oba příkazy produkují stejný výsledek. Ve druhém formuláři pouze explicitně uvádíte výchozí chování pomocí volby -i.