创建整个文件夹的递归硬链接

创建整个文件夹的递归硬链接

首先,我知道您不能创建文件夹的硬链接。

我想知道是否有任何命令(linux)可以自动(和递归)在目标处创建后续文件夹树,然后自动将所有文件从源硬链接到目标。

答案1

我不太清楚您说的“然后自动将所有文件从源硬链接到目标”是什么意思。而且您明确想要的是递归。

如果你希望两个位置保持“同步”,那么例如删除或创建文件应该同时在两个位置观察到,然后绑定挂载(另一个答案)很好。请注意,该解决方案不会在文件系统中留下任何痕迹。如果您创建硬链接,则会在文件系统中创建它。移动磁盘并在另一个操作系统中安装文件系统,硬链接仍然存在。重新启动,硬链接仍然存在。绑定安装是在操作系统级别进行的。不仅如此,在移动和安装磁盘后,您还需要单独命令其他操作系统进行绑定安装。如果您不移动磁盘,您仍然需要告诉当前操作系统进行绑定安装再次重新启动后(如果您想要的是永久解决方案)。

目录的符号链接有些类似,它存在于文件系统中。

ln -s /original /other

如果符号链接及其目标属于同一文件系统,并且符号链接相对的,那么即使文件系统被挂载到其他地方(不同的挂载点,可能在不同的操作系统中),它也能正常工作。有原因的符号链接可能不是你想要的(例子)。

注意绑定挂载或符号链接实际上不是递归的。它是一个单身的“链接”两条路径的行为。它对更深的路径没有任何作用。它们的(半)等价性之所以产生,是因为各自的((((…)曾)曾祖父“目录”之间存在某种联系。

现在,如果“然后自动将所有文件从源硬链接到目标”的意思是“自动执行一次”,那么您可以这样做cp

cp -lR /original /other

-lPOSIX 并不要求)。它类似于cp -R,但带有硬链接。这确实是递归的。但它也是一次性操作。目录子树是分开的,只有常规文件才会出现硬链接。文件创建或删除不会被镜像。破坏硬链接的操作将破坏硬链接。

答案2

绑定挂载是一个更好的解决方案吗?它完全符合您的要求,即让所有文件在两个不同的路径上递归相同。

此命令使其/other具有与现有挂载或目录相同的内容/original

mount --bind /original /other

您在其中一个路径中所做的任何更改/original都会/other立即显示在另一个路径中,因为这两条路径现在指向同一条挂载点。

相关内容