У вашому прикладі вам взагалі не потрібно користуватися, xargsоскільки findбудете робити точно і безпечно те, що ви хочете зробити.
Саме ви хочете використовувати find:
find -maxdepth 1 -name '*Cases*' -exec touch {} +
У цьому прикладі -maxdepth 1означає лише пошук у поточному каталозі, не спускайтеся в жодні підкаталоги; Значення за замовчуванням знайдеться у всіх підкаталогах (що часто є тим, що ви хочете), якщо ви не обмежите його maxdepth. Це {}ім'я файлу, який заміниться замість нього, і +є одним із двох маркерів кінцевих команд, іншим є ;. Різниця між ними полягає в тому, що ;означає виконувати команду для кожного файлу по одному, тоді як +означає виконати команду для всіх файлів одночасно. Однак слід зазначити, що ваша оболонка, ймовірно , спробує інтерпретувати ;себе, так що вам потрібно буде , щоб уникнути його або \;або ';'. Так, findє така кількість маленьких роздратовань, як ця, але її сила більше, ніж компенсує це.
І те findй xargsінше складно навчитися спочатку. Щоб допомогти вам навчитися, xargsспробуйте скористатися параметром -pабо, --interactiveякий покаже вам команду, яку вона збирається виконати, і підкаже, хочете ви її виконати чи ні.
Аналогічно з findвами ви можете використовувати -okзамість того, -execщоб підказати вам, чи хочете ви виконати команду.
Однак бувають випадки, коли findне вдасться виконати все, що ти хочеш, і саме там xargsприходить. -execКоманда прийме лише один екземпляр {}появи, тому якщо ви отримаєте помилку, find -type f -exec cp {} {}.bak \;то замість цього можете зробити це так :find -type f -print0 | xargs -0 -l1 -IX cp X X.bak
Ви можете дізнатися більше про виконання команд у посібнику GNU Findutils .
Крім того, я згадав, що findбезпечно робить те, що ви хочете, тому що, коли ви маєте справу з файлами, ви зіткнетеся з пробілами та іншими символами, які можуть спричинити проблеми, xargsякщо ви не використовуєте параметр -0або --nullпоряд із чимось, що генерує елементи введення, закінчені замість нульового символу. пробілів.
xargsі$(...)), xargs набагато безпечніше, ніж підміна команд. І я не можу пригадати, щоб коли-небудь стикався з законним іменем файлу з новим рядком. Чи не проблеми з розбіганням та розширенням слів є питаннями заміни команд, а не xargs?