首先,我知道您不能创建文件夹的硬链接。
我想知道是否有任何命令(linux)可以自动(和递归)在目标处创建后续文件夹树,然后自动将所有文件从源硬链接到目标。
答案1
我不太清楚您说的“然后自动将所有文件从源硬链接到目标”是什么意思。而且您明确想要的是递归。
如果你希望两个位置保持“同步”,那么例如删除或创建文件应该同时在两个位置观察到,然后绑定挂载(另一个答案)很好。请注意,该解决方案不会在文件系统中留下任何痕迹。如果您创建硬链接,则会在文件系统中创建它。移动磁盘并在另一个操作系统中安装文件系统,硬链接仍然存在。重新启动,硬链接仍然存在。绑定安装是在操作系统级别进行的。不仅如此,在移动和安装磁盘后,您还需要单独命令其他操作系统进行绑定安装。如果您不移动磁盘,您仍然需要告诉当前操作系统进行绑定安装再次重新启动后(如果您想要的是永久解决方案)。
目录的符号链接有些类似,它存在于文件系统中。
ln -s /original /other
如果符号链接及其目标属于同一文件系统,并且符号链接相对的,那么即使文件系统被挂载到其他地方(不同的挂载点,可能在不同的操作系统中),它也能正常工作。有原因的符号链接可能不是你想要的(例子)。
注意绑定挂载或符号链接实际上不是递归的。它是一个单身的“链接”两条路径的行为。它对更深的路径没有任何作用。它们的(半)等价性之所以产生,是因为各自的((((…)曾)曾祖父“目录”之间存在某种联系。
现在,如果“然后自动将所有文件从源硬链接到目标”的意思是“自动执行一次”,那么您可以这样做cp
:
cp -lR /original /other
(-l
POSIX 并不要求)。它类似于cp -R
,但带有硬链接。这确实是递归的。但它也是一次性操作。目录子树是分开的,只有常规文件才会出现硬链接。文件创建或删除不会被镜像。破坏硬链接的操作将破坏硬链接。
答案2
会绑定挂载是一个更好的解决方案吗?它完全符合您的要求,即让所有文件在两个不同的路径上递归相同。
此命令使其/other
具有与现有挂载或目录相同的内容/original
:
mount --bind /original /other
您在其中一个路径中所做的任何更改/original
都会/other
立即显示在另一个路径中,因为这两条路径现在指向同一条挂载点。