что такое различия между 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 '{}'

2

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

ls | xargs -iPLACEHOLDER echo PLACEHOLDER

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.