Я хочу знать, в чем разница между этим
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.