【问题标题】:Can I symlink multiple directories into one?我可以将多个目录符号链接到一个目录中吗?
【发布时间】:2009-01-08 05:05:32
【问题描述】:

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

我有许多不同的文件夹:

images_a/
images_b/
images_c/

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

【问题讨论】:

    标签: unix symlink


    【解决方案1】:

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

    可以做的是创建一个定期运行的作业,该作业基本上删除了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 进行符号链接。
    • 只需添加一个 if 语句来检查文件是否已存在于目标中。无需删除...抱歉评论了一个 11 岁的帖子
    【解决方案2】:

    你可以试试 unionfs 之类的联合文件系统!

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

    http://aufs.sourceforge.net/

    【讨论】:

    • 而“仍处于开发阶段”这句话甚至让最勇敢的人都感到恐惧:-)。
    • aufs 已经在 Ubuntu 中使用了一段时间,所以它可能已经足够稳定了。
    【解决方案3】:

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

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

    (虽然我没有测试过)

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

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多