如果使用符号链接,可以这样做:
假设alpha是目录alpha_1的符号链接,并且您想要将符号链接转换为指向alpha_2。这是切换之前的样子:
$ ls -l
lrwxrwxrwx alpha -> alpha_1
drwxr-xr-x alpha_1
drwxr-xr-x alpha_2
要使alpha参考alpha_2,请使用ln -nsf:
$ ln -nsf alpha_2 alpha
$ ls -l
lrwxrwxrwx alpha -> alpha_2
drwxr-xr-x alpha_1
drwxr-xr-x alpha_2
现在可以删除旧目录:
$ rm -rf alpha_1
请注意,这并不是一个完全原子的操作,但它确实发生得很快,因为“ln”命令都取消链接,然后立即重新创建符号链接。您可以使用strace验证此行为:
$ strace ln -nsf alpha_2 alpha
...
symlink("alpha_2", "alpha") = -1 EEXIST (File exists)
unlink("alpha") = 0
symlink("alpha_2", "alpha") = 0
...
您可以根据需要重复此过程:例如当您有新版本时,alpha_3:
$ ln -nsf alpha_3 alpha
$ rm -rf alpha_2