Linux下使用ln命令如何避免‘are the same file’错误?
解决Ubuntu下重复执行
ln -sf . dot报错的问题 问题原因
首次执行ln -sf . dot后,dot已成为当前目录(.)的软链接。再次执行该命令时,GNU ln会解析目标路径dot,发现dot/.等价于当前目录(.),因此判定源文件和目标文件为同一个,抛出错误。
解决方案
方法1:先删除软链接再创建
直接移除已存在的dot软链接后重新创建,避免ln解析已存在的链接:
rm -f dot && ln -sf . dot
rm -f dot:强制删除dot(无论它是软链接还是普通文件,都不会报错)- 后续执行
ln -sf . dot重新创建链接
方法2:检查链接状态后再执行创建
通过条件判断,仅当dot不是软链接,或它指向的目标不是当前目录时,才执行创建命令:
if [ ! -L dot ] || [ "$(readlink dot)" != "." ]; then ln -sf . dot; fi
! -L dot:判断dot不是软链接readlink dot:获取软链接指向的目标路径- 满足任一条件时执行
ln命令,避免无效的重复操作
方法3:使用-n选项处理已存在的目录软链接
GNU ln的-n(--no-dereference)选项,会将已存在的、指向目录的软链接当作普通文件处理,直接替换而不解析链接目标:
ln -sfn . dot
-n:阻止ln跟随已存在的软链接,直接覆盖原链接,避免触发源目标相同的判定
内容的提问来源于stack exchange,提问作者personal_cloud
相关产品推荐
相关产品推荐

