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

Dan*_*DRH 10 sync dropbox directory symbolic-link

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

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

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

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

提前致谢。

Jac*_*ijm 8

脚本化解决方案

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)
Run Code Online (Sandbox Code Playgroud)
  1. 将脚本复制到一个空文件中,另存为 library_view.py
  2. 使用目标目录测试运行脚本,以查看作为第一个参数的源目录中的组合目录作为下一个参数,例如:

    python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
    
    Run Code Online (Sandbox Code Playgroud)

    此命令将显示文件夹的内容source1,并source2virtual_library

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

    python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
    
    Run Code Online (Sandbox Code Playgroud)

笔记

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

2. 手动版

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

python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
Run Code Online (Sandbox Code Playgroud)

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

python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
Run Code Online (Sandbox Code Playgroud)