Це можна зробити find
безпосередньо, використовуючи -exec
:
find . -name "*.xml" -type f -exec xmllint --output '{}' --format '{}' \;
Те, що передано, -exec
буде викликано один раз для кожного знайденого файлу з {}
заміненими параметрами шаблону поточним іменем файлу. Команда \;
в кінці знаходження просто закінчує рядок.
Використання xargs
в цьому випадку насправді не потрібне, оскільки нам потрібно викликати xmllint
один раз за файл, оскільки імена вхідних і вихідних файлів повинні бути вказані в межах одного виклику.
xargs
знадобиться, якби команда, на яку перебувають з пошуку, працювала над кількома файлами одночасно, і цей список був довгим. У цьому випадку ви не можете цього зробити, оскільки вам потрібно передати одне ім'я файлу до --output
параметра xmllint
. Без xargs
ви могли б у кінцевому підсумку з «список аргументів занадто довго» помилка , якщо ви обробляєте багато файлів. xargs
також підтримує рядки заміни файлів з -I
можливістю:
find . -name "*.xml" -type f | xargs -I'{}' xmllint --output '{}' --format '{}'
Зробимо так само, як і find -exec
команда, наведена вище. Якщо будь-яка з ваших папок має непарні символи у подібних пробілах, вам потрібно буде скористатися -0
параметрами find
та xargs
. Але використання xargs
з -I
увазі можливість , -L 1
яка означає тільки обробити 1 файл в той час , в будь-якому випадку, так що ви можете також використовувати безпосередньо find
з -exec
.