我想取出数据/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 是目录的符号链接,则将其视为普通文件