我正在尝试将一些文件从一个目录复制到另一个目录,并解析目标目录中的所有符号链接。为了更好地说明我的意思,我的源目录如下所示:
source
|-- dir1
| `-- file1
|-- dir2
| |-- dir4
| `-- file2
`-- dir3
`-- file3
目标目录:
dest
|-- dir1
|-- dir2 -> dir1
`-- dir3
我想以递归方式从source
复制到dest
,以便操作完成后目标目录如下所示:
dest
|-- dir1
| |-- dir4
| |-- file1
| `-- file2
|-- dir2 -> dir1
`-- dir3
`-- file3
我目前正在尝试使用cp -R source/. dest/
(由于其他原因,我无法使用 shell glob *
) 来执行此操作,但失败并出现错误cp: target dest/./dir2 is not a directory
。我该如何实现所需的结果?
编辑:不能假设中的所有目录都source
存在于中dest
。
修改 2:我可以通过创建一个 tarballsource
并将其提取到 来实现这一点dest
。但这感觉很笨重,而且增加了不必要的步骤。
我建议使用
find
:(在编辑问题后添加了创建目录的部分,以澄清目录可能不存在
dest
。)我发现了一种基于@Bodo 解决方案的方法,涉及查找:
基本上,如果目录不存在,则先创建目录,然后使用 find 方法复制它们。