用它指向的文件夹自动替换符号链接

问题描述 投票:0回答:1

我有一个符号链接,指向通过网络文件系统安装的目录,如下所示:

2023 -> /mnt/bulk013/obs_data_archive/metwatch/2023/

现在我想用它指向的文件夹替换符号链接,这种方式不会干扰经常从此目录(原子地)读取的高效应用程序。在我的例子中,这意味着首先将所有数据复制到我的本地硬盘驱动器(文件夹

2023
所在的位置)。我这样做并使用临时目录来存储文件:

2023.tmp/

所以现在的问题是,如何自动切换符号链接与实际文件夹,以便该文件夹的名称为

2023

2023 -> /mnt/bulk013/obs_data_archive/metwatch/2023/   # remove this
2023.tmp/  # and replaced with this (renamed to 2023)
linux bash ubuntu ubuntu-20.04
1个回答
0
投票

简单来说,如果我们有:

link -> dir/

并想将其混合成:

link/

看起来我们想要的是执行系统调用rename("dir", "link/")

不幸的是,这在

errno

 为 20 (
ENOTDIR
) 的 Linux 上不起作用。这是 POSIX 对 
rename记录
rename
 可以返回 
ENOTDIR
 的原因之一是:

旧参数命名一个目录,新参数命名一个非目录文件

看起来可能没有办法做到这一点;它必须分两次操作完成,需要暂停访问应用程序。

如果应用程序由少量进程组成,您可以将所有进程都

kill -STOP

,进行混合,然后
kill -CONT
。对于停止的进程,该操作将显示为原子操作。

© www.soinside.com 2019 - 2024. All rights reserved.