Как найти файлы и скопировать в несуществующую папку одной командой?

Как найти файлы и скопировать в несуществующую папку одной командой?

Например:

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

Связанный контент