Только не используйте xargs
. Это аккуратная программа, но она не подходит для find
, когда сталкивается с нетривиальными случаями.
Вот портативное (POSIX) решение, то есть такое, которое не требует find
, xargs
или cp
определенных GNU расширений:
find . -name "*FooBar*" -exec sh -c 'cp -- "$@" ~/foo/bar' sh {} +
Обратите внимание на окончание +
вместо более обычного ;
.
Это решение:
правильно обрабатывает файлы и каталоги со встроенными пробелами, символами новой строки или любыми экзотическими символами.
работает в любой системе Unix и Linux, даже в тех, которые не предоставляют инструментарий GNU.
не использует xargs
, что является хорошей и полезной программой, но требует слишком много настроек и нестандартных функций для правильной обработки find
вывода.
также более эффективно (читается быстрее ), чем принятые, и большинство, если не все другие ответы.
Обратите внимание, что, несмотря на то, что указано в некоторых других ответах или комментариях, цитирование {}
бесполезно (если вы не используете экзотическую оболочку fish
).