Как выполнять команды find
и cp
одновременно? Я пробовал:Как выполнять команды find и cp одновременно в Linux?
find -name "*pdf*" | xargs cp $1 ./
Но это не работает.
Как выполнять команды find
и cp
одновременно? Я пробовал:Как выполнять команды find и cp одновременно в Linux?
find -name "*pdf*" | xargs cp $1 ./
Но это не работает.
Используйте -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 {} . ';'
первый не работает для меня (Linux, Баш 4.3.46) ... об ошибке '' find: отсутствующий аргумент '-exec''' ... этот файл' find -name '* pdf *' -exec cp -t ./ {} \ + ' – Sundeep
@Sundeep, fixed –