Shell中同时复制符号链接及其指向文件/目录的方法
解决同时复制符号链接及其指向目标的问题
没问题,我来帮你搞定这个需求——既要复制符号链接LATEST本身,又要把它指向的目标内容一并复制过去。你用cp -d只能复制链接本身的情况很常见,这里有几种实用的实现方法:
方法一:分两次复制(最直观)
先复制符号链接指向的目标目录,再复制符号链接本身,这样能保证复制后的链接依然指向正确的目标:
# 第一步:复制LATEST指向的目标目录file1到目标路径 cp -r file1 /path/to/your/destination/ # 第二步:复制符号链接LATEST,保留其链接属性 cp -d LATEST /path/to/your/destination/
复制完成后,目标目录里的LATEST会和原目录一样,指向同目录下的file1,结构完全一致。
方法二:用cp的-L参数一次性处理目标+链接
如果你想用更紧凑的命令,可以利用cp -L(--dereference)参数跟随符号链接复制内容,再单独复制链接:
# 跟随LATEST链接,复制其指向的内容到目标目录,命名为原目标名file1 cp -rL LATEST /path/to/your/destination/$(basename LATEST) # 再复制原始符号链接 cp -d LATEST /path/to/your/destination/
这里$(basename LATEST)会自动提取链接指向的目标名称(也就是file1),避免手动输入出错。
方法三:用rsync一键搞定(最便捷)
rsync在处理文件和链接的复制时非常灵活,能一次性完成“复制链接+复制目标内容”的操作:
# 仅复制LATEST和它指向的file1到目标目录 rsync -avL --include='LATEST' --include='file1' --exclude='*' ./ /path/to/your/destination/
参数说明:
-a:归档模式,保留文件权限、所有权等所有属性-v:显示复制过程的详细信息-L:跟随符号链接,复制其指向的实际内容--include:指定需要复制的文件/目录,这里我们明确要LATEST和file1--exclude='*':排除其他所有未指定的内容
如果你的当前目录只有file1、file2和LATEST,且不需要排除file2,可以简化成:
rsync -avL ./ /path/to/your/destination/
这样会把所有内容都复制过去,同时保证LATEST链接依然指向目标目录里的file1。
内容的提问来源于stack exchange,提问作者darecoder
相关产品推荐
相关产品推荐

