我可以将多个目录符号链接到一个目录中吗?

时间:2009-01-08 05:05:33

标签: unix symlink

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

我有许多不同的文件夹:

images_a/
images_b/
images_c/

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

3 个答案:

答案 0 :(得分:12)

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

可以做的是创建一个定期运行的作业,基本上删除images_all中的所有现有符号链接,然后重新创建三个中所有文件的链接其他目录,但它有点像kludge,像这样:

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

我没有测试过,所以实施它的任何人都必须确认是否合适。

答案 1 :(得分:8)

您可以尝试使用unionfs等工会文件系统!

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

http://aufs.sourceforge.net/

答案 2 :(得分:0)

要补充paxdiablo的出色答案,我认为您可以使用cp -s
(-s或--symbolic-link) 可以进行符号链接,而不是直接复制

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

(尽管我尚未对此进行测试)

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