有没有一种简单的方法可以递归地复制目录,其中解析到外部文件/目录的符号链接(复制目标文件),但保留内部符号链接(指向复制树内的文件)?
例子:
touch outsidefile
mkdir src
ln -s ../outsidefile src/sym1
touch src/insidefile
ln -s insidefile src/sym2
cp [???] src dest # or other command
想要的结果:
$ ls dest
insidefile
sym1
sym2 -> insidefile
iesym1
是一个常规文件,sym2
保持符号链接。
答案1
rsync -a --copy-unsafe-links src/ dest
从man
页面:
--复制不安全链接
这告诉 rsync 复制指向复制树外部的符号链接的引用。绝对符号链接也被视为普通文件,
--relative
使用时源路径本身中的任何符号链接也是如此。如果--copy-links
也指定了此选项,则不会产生任何附加效果。[...]
--links --复制不安全链接 将所有不安全的符号链接转换为文件并复制所有安全的符号链接。