![cp 递归到一个目录,该目录符号链接到与源中同名的目录](https://linux22.com/image/165204/cp%20%E9%80%92%E5%BD%92%E5%88%B0%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95%EF%BC%8C%E8%AF%A5%E7%9B%AE%E5%BD%95%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E5%88%B0%E4%B8%8E%E6%BA%90%E4%B8%AD%E5%90%8C%E5%90%8D%E7%9A%84%E7%9B%AE%E5%BD%95.png)
cp -r src/* dest/
如果src/
&dest/
都包含目录foo
,则 的内容src/foo/
将被复制到 中dest/foo/
,这是所需的。
如果dest/
相反包含到其他地方的目录的符号链接foo -> /sym/foo
,则命令错误:
cp:无法用目录“src/foo”覆盖非目录“dest/foo”
是否可以复制以下内容目标符号链接,与 GNU cp
?据我所知,它只有一个选项(-L
/ --dereference
)用于以下操作来源符号链接。
答案1
您可以使用rsync
's--keep-dirlinks
选项来实现此行为:
从man rsync (1)
:
-K, --keep-dirlinks
此选项使接收方将目录的符号链接视为真实目录,但前提是它与发送方的真实目录匹配。如果没有此选项,接收者的符号链接将被删除并替换为真实目录。
例如,假设您传输包含文件“file”的目录“foo”,但“foo”是接收器上目录“bar”的符号链接。如果没有
--keep-dirlinks
,接收者将删除符号链接“foo”,将其重新创建为目录,并将文件接收到新目录中。使用--keep-dirlinks
,接收者保留符号链接,并且“文件”以“bar”结束。
例子:
rsync -av --keep-dirlinks src/ dest