创建符号链接 - 如果存在则覆盖

创建符号链接 - 如果存在则覆盖

我想取出数据/path/to/data/folder/month/date/hour/minute/file并将其符号链接到,/path/to/recent/file并在每次创建文件时自动执行此操作。

假设我不会提前知道它是否/path/to/recent/file存在,我该如何创建它(如果它不存在)或替换它(如果它存在)?我确信我可以检查它是否存在,然后执行删除、符号链接,但我想知道是否有一个简单的命令可以一步完成我想要的操作。

答案1

ln这就是's选项的目的-f:它在创建链接之前删除现有的目标文件(如果有)。

ln -sf /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

/path/to/recent/file将创建指向 的符号链接/path/to/data/folder/month/date/hour/minute/file,如有必要,替换任何现有文件或文件的符号链接(如果那里不存在任何东西,则工作正常)。

如果目标名称已经存在目录或目录的符号链接,则将在其中创建符号链接(因此您最终会/path/to/recent/file/file在上面的示例中得到)。该-n选项在 的某些版本中可用ln,将为您处理目录的符号链接,并根据需要替换它们:

ln -sfn /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

POSIXln没有指定-n,所以你一般不能依赖它。的大部分ln行为是实现定义的,因此您确实需要检查您正在使用的系统的具体情况。如果您正在使用GNUln,您也可以使用-t-T选项,使其行为在存在目录时完全可预测(IE失败而不是在现有的同名目录中创建链接)。

答案2

请阅读手册

ln -sfn /new/target /path/to/symlink

$ 人 ln

-n, --no-dereference
如果 LINK_NAME 是目录的符号链接,则将其视为普通文件

相关内容