使文件夹成为两个文件夹的符号链接?

使文件夹成为两个文件夹的符号链接?

我希望 Ubuntu 的默认音乐文件夹/home/$USER/Music能够像 Windows 中的库一样发挥作用。本质上,它将是一个包含其他文件夹内容的虚拟文件夹。

我的理由是 Rhythm Box 只会查看一个文件夹中的新音乐。我的所有音乐都位于两个文件夹/home/$USER/Dropbox/Music/home/$USER/Dropbox/New Music

这也证明在 Ubuntu 的默认文件夹(文档、图片等)中显示其他 Dropbox 文件夹的内容很有用。

我确实搜索过,并试图自己找到答案,但没有成功。我确信有办法做到这一点;我只是错过了。

提前致谢。

答案1

脚本解决方案

1. 自动更新图书馆视图

使用下面的背景脚本,您可以设置一个目录,虚拟地显示任意数量的其他文件夹的组合内容。

文件夹的内容(现有的符号链接)与(组合的)源动态同步。

怎么运行的

该脚本定期列出源文件夹的内容以及“库”视图的目标文件夹的内容。

  • 如果任何源文件夹中有项目,不是存在于库中,则会在库中创建一个符号链接。
  • 如果图书馆里有物品,不是存在于任何源文件夹中(实际上是一个断开的链接),则该项目是已删除从图书馆。

在此处输入图片描述

比较列表非常轻量(以编程方式)且资源消耗低。我使用比下面脚本快得多的循环测试了该脚本,单个目录级别中的项目数量约为 500 个,没有任何额外的(明显的)负载。

脚本及其使用方法

#!/usr/bin/env python3
import os
import sys
import time

# --- set loop time below (or leave it as it is)
loop = 5
# ---
# don't change anything below

target = sys.argv[1]
sources = sys.argv[2:]

while True:
    currlinks = os.listdir(target)
    compare = []
    for dr in sources:
        for f in os.listdir(dr):
            compare.append(f)
            if not f in currlinks:
                # create link
                os.symlink(dr+"/"+f, target+"/"+f)
    # clean up possible broken links
    for link in currlinks:
        if not link in compare:
            os.remove(target+"/"+link)
    # loop time
    time.sleep(loop)
  1. 将脚本复制到一个空文件中,另存为library_view.py
  2. 使用以下脚本测试运行有针对性的目录中,查看组合目录,如下图所示第一个参数,源目录作为下一个参数,例如:

    python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
    

    source1此命令将显示文件夹和source2的内容virtual_library

  3. 如果一切正常,请将其添加到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:

    python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
    

笔记

如上所述,如果愿意,您可以添加两个以上的源目录。

2. 手动版本

如果您由于某种原因不想使用后台脚本,则可以使用以下脚本,使用快捷键下的完全相同的命令手动更新(同步)库文件夹:

#!/usr/bin/env python3
import os
import sys

target = sys.argv[1]
sources = sys.argv[2:]

currlinks = os.listdir(target)
compare = []
for dr in sources:
    for f in os.listdir(dr):
        compare.append(f)
        if not f in currlinks:
            # create link
            os.symlink(dr+"/"+f, target+"/"+f)
# clean up possible broken links
for link in currlinks:
    if not link in compare:
        os.remove(target+"/"+link)

选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并添加您选择的组合键命令:

python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2

答案2

您可以unionfs-fuse为此安装:

sudo apt-get install unionfs-fuse 

安装:

unionfs-fuse /folder1=RW:/folder2=RW /mount/point

它将把所有内容分组文件夹1文件夹2(或更多,如果你愿意)到你的挂载点

卸载:

sudo umount /mount/point

相关内容