что такое различия между XARGS с фигурными скобками и без в Linux

18

Я хочу знать, в чем разница между этим

ls | xargs rm

ls | xargs -i{} rm {}

Оба работают на меня


источник

Ответы:

19

xargs rmбудет вызывать rmсо всеми аргументами как параметр, отправленный с пробелами.

xargs -i{} rm {}вызовет rm {}для каждого аргумента и {}будет заменен текущим аргументом.

Если у вас есть 2 аргумента a.txtи b.txt, xargs rm назовем это

rm a.txt b.txt

Но xargs -i{} rm {}позвоню

rm a.txt
rm b.txt

Это потому, что -iопция подразумевает -L 1опцию, которая означает, что команда rmбудет 1каждый раз принимать только строку. И здесь каждая строка содержит только 1 аргумент.

Проверьте эту ссылку Ideone, чтобы получить больше информации об этом.

Шиплу Мокаддим
источник
1
@ user19140477031 зависит от того, какую операцию вы выполняете. ибо rmэто не имеет значения
Шиплу Мокаддим
3

С фигурными скобками он будет порождать один rmпроцесс на файл. Без фигурных скобок xargsкаждая rmкоманда будет передавать как можно больше имен файлов .

сравнить

ls | xargs echo

и

ls | xargs -i echo '{}'
kmkaplan
источник
2

Опция -i (эквивалентно --replace) создает своего рода заполнитель, в котором xargs хранит только что полученный ввод. Во второй команде указатель места заполнения - "{}", он работает как опция find -exec. После определения xargs заменит этот заполнитель на всю строку ввода. Если вам не нравится имя "{}", вы можете определить свое собственное:

ls | xargs -iPLACEHOLDER echo PLACEHOLDER

В вашем случае обе команды дают одинаковый результат. Во второй форме вы просто указываете поведение по умолчанию с помощью опции -i.

AAG
источник