2016-11-03 8 views

ответ

2

Используйте -exec вариант:

find ./ -name "*pdf*" -exec cp -t . {} \+ 

{} заменяется текущие имена файлов обрабатываются.

На странице человека для find:

-exec command {} +

... командная строка строится присоединяя каждое выбранное имя файла в конце .. Командная строка построена во многом так же, как xargs строит свои командные строки.

Обратите внимание на использование опции -t (целевой каталог) (которая является расширением GNU). Мы не можем использовать -exec cp {} . +, потому что совпадающие имена файлов добавляются в конец командной строки, в то время как назначение должно быть указано последним. Другим решением является вызвать sh:

find ./ -name "*pdf*" -exec sh -c 'cp "[email protected]" .' '' {} + 

Я обычно избегали + характер. Обратите внимание: вам следует избегать специальных символов синтаксиса find, чтобы защитить их от расширения оболочкой. В частности, скорее всего, нет необходимости в обратной косой чертой до +, потому что большинство оболочек интерпретируют ее как строку (она не будет расширена до чего-то другого). Тем не менее, вы, безусловно, придется бежать/цитируют ; (который применяет команду к каждому файлу последовательно):

find -name "*pdf*" -exec cp -f {} . ';' 
+0

первый не работает для меня (Linux, Баш 4.3.46) ... об ошибке '' find: отсутствующий аргумент '-exec''' ... этот файл' find -name '* pdf *' -exec cp -t ./ {} \ + ' – Sundeep

+1

@Sundeep, fixed –