我希望 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)
- 将脚本复制到一个空文件中,另存为
library_view.py
使用以下脚本测试运行有针对性的目录中,查看组合目录,如下图所示第一个参数,源目录作为下一个参数,例如:
python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
source1
此命令将显示文件夹和source2
的内容virtual_library
。如果一切正常,请将其添加到启动应用程序: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