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