В вашем примере вам не нужно использовать xargsвообще, так как findбудет делать точно и безопасно, что вы хотите сделать.
Именно то, что вы хотите использовать, findэто:
find -maxdepth 1 -name '*Cases*' -exec touch {} +
В данном примере -maxdepth 1означает только поиск в текущем каталоге, не спустится в подкаталоги; По умолчанию find будет искать во всех подкаталогах (что часто и бывает), если вы не ограничите их 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?