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