У вашому прикладі вам взагалі не потрібно користуватися, 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?