将找到的目录复制到使用指定参数和找到的目录构建的路径

Copying found directory to path built using specified argument and found directory

我有以下 bash 脚本:

cd root_folder && find folder1 folder2 -name "doc" -exec cp -r --parents {} {} \;

思路是找到folder1folder2下所有名为doc的文件夹,复制从root_folder开始的结构到用户指定的路径参数(以及 doc 的所有内容)。

例如

root_folder/folder1/other_folder/doc

变成:

/folder1/other_folder/doc

只要我没有让用户指定要复制到的文件夹,即如果我没有 </code>,这个脚本就可以工作。但是,当我确实拥有它时,出现错误:</p> <pre><code>cp: with --parents, the destination must be a directory Try `cp --help' for more information.

尽管 1) 我已经确保指定的文件夹事先存在,并且 2) 如果我输出要复制到的完整路径,它看起来完全正确,即 /folder1/other_folder/doc

我也试过在 </code> 之后添加一个 <code>/ 来生成 /{},但是这样正斜杠太多了,使得路径包含 // 这是明显错了

我在这里错过了什么?

答案是将 dirname 添加到目标路径:

cd root_folder && find folder1 folder2 -name "doc" -exec cp -r --parents {} `dirname /{}` \;