Например:
find /usr -type f -name "*.txt" -exec cp -r {} ~/txts/ \;
Работает отлично в случае, если у нас есть существующие каталоги txts.
Насколько я понимаю -cp не имеют флаговчтобы решить этот случай. Может быть, мне следует использовать rsync или что-то еще?
решение1
Хороший вопрос, вы можете попробовать это:
Сначала cd
в /usr
, это потому, что когда вы используете абсолютный путь (например /usr
, ) с , find
я подозреваю, что это приведет {}
к содержанию полных путей.
find . -type f -a -name "*.txt" -a -exec install -D {} ~/texts/{} \;
При выполнении этой команды я получил следующее сообщение об ошибке:
найти: './share/doc/google-chrome-stable': Отказано в доступе
Сообщение об ошибке не означает, что операция в целом не удалась, оно просто означает, что find
не удалось выполнить команду в ./share/doc/google-chrome-stable
каталоге.
Но для меня все остальные файлы и их пути были скопированы, а пути к каталогам были созданы по мере необходимости.
После дальнейшего расследования причина ошибки была выяснена.
% ls -al --directory ./share/doc/google-chrome-stable
drwx------ 2 root root 4096 Aug 21 12:45 ./share/doc/google-chrome-stable