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.