Я хочу знать, в чем разница между этим
ls | xargs rm
ls | xargs -i{} rm {}
Оба работают на меня
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, чтобы получить больше информации об этом.
rm
это не имеет значенияС фигурными скобками он будет порождать один
rm
процесс на файл. Без фигурных скобокxargs
каждаяrm
команда будет передавать как можно больше имен файлов .сравнить
и
источник
Опция -i (эквивалентно --replace) создает своего рода заполнитель, в котором xargs хранит только что полученный ввод. Во второй команде указатель места заполнения - "{}", он работает как опция find -exec. После определения xargs заменит этот заполнитель на всю строку ввода. Если вам не нравится имя "{}", вы можете определить свое собственное:
В вашем случае обе команды дают одинаковый результат. Во второй форме вы просто указываете поведение по умолчанию с помощью опции -i.
источник