35

我有一种感觉,我已经知道这个问题的答案,但我想我会检查一下。

我有许多不同的文件夹:

images_a/
images_b/
images_c/

我可以创建某种符号链接,以便这个新目录包含所有这些目录的内容吗?那就是这个新的“ images_all”将包含所有文件images_aimages_b并且images_c

4

3 回答 3

14

不可以。您必须以符号方式链接所有单个文件。

可以做的是创建一个定期运行的作业,该作业基本上删除了 中的所有现有符号链接images_all,然后为其他三个目录中的所有文件重新创建链接,但这有点麻烦,如下所示:

rm -f images_all/*
for i in images_[abc]/* ; do; ln -s $i images_all/$(basename $i) ; done

请注意,在此作业运行时,其他进程可能会认为文件已暂时消失。

您还需要注意两个或多个目录中存在单个文件名的情况。


一段时间后回到这个问题,我也想到你可以尽量减少文件不可用的时间。

如果您将它们链接到不同的目录,则执行相对较快mv的操作以最大限度地减少时间。就像是:

mkdir images_new
for i in images_[abc]/* ; do
    ln -s $i images_new/$(basename $i)
done

# These next two commands are the minimal-time switchover.
mv images_all images_old
mv images_new images_all

rm -rf images_old

我尚未对此进行测试,因此任何实施它的人都必须确认其适用性或其他方式。

于 2009-01-08T05:11:27.363 回答
9

您可以尝试联合文件系统,例如 unionfs!

http://www.filesystems.org/project-unionfs.html

http://aufs.sourceforge.net/

于 2009-01-08T05:19:50.823 回答
3

要添加到 paxdiablo 的出色答案,我认为您可以使用 cp -s
(-s 或 --symbolic-link) 来制作符号链接而不是文字复制

可能加快或简化将符号链接批量添加到文件夹 B 和 C 中的文件的“合并”文件夹 A 中。

(虽然我没有测试过这个)

我不记得我的头顶了,但我确定 CP 有一些选项可以不覆盖现有的,因此只有新文件的符号链接才会被“cp -s”编辑

于 2019-02-13T22:02:34.457 回答