У меня есть документы, распределенные между несколькими каталогами по заданному пути, например /media/devicename/name_of_directories. Я использовал команду find чтобы помочь найти определенные файлы, например .doc, docx и т.д.

find . -type f -regextype posix-egrep -regex '.*/.*/.*\.(doc|docx)' -exec cp -r {} somedirectory \;

Я знаю, что команда cp -r используется, если я копирую файлы из заданного каталога, но в случае моей команды find это необходимо и если да или нет, то почему?

2 ответа2

2

Флаг -r в cp обозначает рекурсивный. Вы используете его при копировании целых папок, потому что он инструктирует cp спускаться в папку и рекурсивно копировать все, что находится внутри.

Вам не нужно делать это, когда вы просто копируете отдельные файлы, потому что они (концептуально) единая сущность. Как говорит Ярослав Рахматуллин, рекурсивный запуск cp для одного файла не имеет смысла, потому что нечего рекурсировать.

Смотрите http://en.wikipedia.org/wiki/Recursion

Или введите man cp для получения дополнительной информации.

1

Вы не можете скопировать файл рекурсивно, только папку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .