що відрізняється між xargs з дужками і без в Linux


19

Я хочу знати, в чому різниця між цим

ls | xargs rm

ls | xargs -i{} rm {}

Обидва працюють на мене

Відповіді:


19

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, щоб отримати більше уявлень про нього.


Що краще

1
@ user19140477031 залежить від того, яку операцію ви виконуєте. для rmцього не має значення
Шиплу Мокаддім

3

За допомогою брекетів він породжує один rmпроцес на файл. Без дужок xargsпередасть якомога більше імен файлів кожній rmкоманді.

Порівняйте

ls | xargs echo

і

ls | xargs -i echo '{}'

2

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

лс | xargs -iPLACEHOLDER echo PLACEHOLDER

У вашому випадку обидві команди дають однаковий результат. У другій формі ви просто робите явну поведінку за замовчуванням за допомогою параметра -i.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.