Сценарий решения
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> Startup Applications> Add. Добавьте команду:
python3 /path/to/library_view.py /path/to/virtual_library /path/to/source1 /path/to/source2
Запись
Как уже упоминалось, вы можете добавить более двух справочников soure, если хотите.
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
sudo mount --bind olddir newdir
но это, вероятно, не совсем то, что вы ищете ...