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

我想让Ubuntu的默认音乐文件夹/home/$USER/Music像Windows中的库一样。 基本上它将是一个包含其他文件夹内容的虚拟文件夹。

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

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

我做了搜索并试图自己找到答案无济于事。 我确信有办法实现这一目标; 我只是想念它。

提前致谢。

脚本解决方案

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. 使用目标目录测试运行脚本,以第一个参数的forms查看组合目录,将源目录作为下一个参数,例如:

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

    此命令将在virtual_library显示文件夹source1source1的内容。

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

     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) 

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

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

你可以为此安装unionfs-fuse

 sudo apt-get install unionfs-fuse 

安装:

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

它会将folder1folder2中的所有内容(如果需要,还可以更多)分组到挂载点

Umounting:

 sudo umount /mount/point