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