【发布时间】:2009-01-08 05:05:32
【问题描述】:
我有一种感觉,我已经知道这个问题的答案,但我想我会检查一下。
我有许多不同的文件夹:
images_a/
images_b/
images_c/
我可以创建某种符号链接以使这个新目录包含所有这些目录的内容吗?也就是说这个新的“images_all”将包含images_a、images_b和images_c中的所有文件?
【问题讨论】:
我有一种感觉,我已经知道这个问题的答案,但我想我会检查一下。
我有许多不同的文件夹:
images_a/
images_b/
images_c/
我可以创建某种符号链接以使这个新目录包含所有这些目录的内容吗?也就是说这个新的“images_all”将包含images_a、images_b和images_c中的所有文件?
【问题讨论】:
没有。您必须以符号方式链接所有单个文件。
您可以做的是创建一个定期运行的作业,该作业基本上删除了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
我尚未对此进行测试,因此任何实施它的人都必须确认是否适用。
【讨论】:
lndir 进行符号链接。
你可以试试 unionfs 之类的联合文件系统!
【讨论】:
aufs 已经在 Ubuntu 中使用了一段时间,所以它可能已经足够稳定了。
要添加到 paxdiablo 的出色答案,我认为您可以使用 cp -s
(-s 或 --symbolic-link)
这使得符号链接而不是文字复制
可能加快或简化将符号链接批量添加到文件夹 B 和 C 中的文件的“合并”文件夹 A 中。
(虽然我没有测试过)
我不记得我的头顶了,但我确定 CP 有一些选项可以不覆盖现有的,因此只有新文件的符号链接才会被“cp -s”编辑
【讨论】: