В вашем примере вам не нужно использовать 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?