Làm cho thư mục một liên kết tượng trưng đến hai thư mục?


10

Tôi muốn có thư mục nhạc mặc định của Ubuntu /home/$USER/Musichoạt động gần giống như thư viện trong Windows. Về cơ bản nó sẽ là một thư mục ảo chứa nội dung của các thư mục khác.

Lý do của tôi là Nhịp điệu Box sẽ chỉ xem một thư mục cho âm nhạc mới. Tất cả âm nhạc của tôi nằm trong hai thư mục /home/$USER/Dropbox/Music/home/$USER/Dropbox/New Music.

Điều này cũng hữu ích để hiển thị nội dung của các thư mục Dropbox khác trong các thư mục mặc định của Ubuntu (Tài liệu, Hình ảnh, v.v.).

Tôi đã tìm kiếm và cố gắng tự mình tìm ra câu trả lời. Tôi chắc chắn có một cách để thực hiện điều này; Tôi chỉ thiếu nó thôi.

Cảm ơn trước.


1
Có khả năng liên kết 2 thư mục cùng với: sudo mount --bind olddir newdirnhưng đây có thể không chính xác là những gì bạn đang có sau ...
andrew.46

@ andrew.46 mount --bindcho phép truy cập vào một bộ thư mục từ hai điểm gắn kết khác nhau. OP muốn truy cập hai bộ thư mục từ một điểm gắn kết
EdiD

@Edid: Rất tiếc, bạn hoàn toàn chính xác ... xin lỗi vì tiếng ồn ...
andrew.46

Tôi có thể nghĩ ra một cách, nhưng nó sẽ đòi hỏi một kịch bản nền nhỏ. Điều đó có được chấp nhận không?
Jacob Vlijm

@JacobVlijm Xin đừng nói với tôi rằng tập lệnh sẽ kiểm tra xem có tập tin nào có sẵn trong thư mục không và sao chép vào hai đích sau đó ..
heemayl

Câu trả lời:


8

Giải pháp kịch bản

1. Tự động cập nhật chế độ xem thư viện

Với tập lệnh nền bên dưới, bạn có thể thiết lập một thư mục, hầu như hiển thị nội dung kết hợp của một số lượng thư mục khác tùy ý.

Nội dung của thư mục (hiện có của các liên kết tượng trưng) được đồng bộ hóa động với các nguồn (kết hợp).

Làm thế nào nó hoạt động

Kịch bản liệt kê định kỳ nội dung của các thư mục nguồn cũng như thư mục được nhắm mục tiêu cho chế độ xem "thư viện".

  • Nếu có các mục trong bất kỳ thư mục nguồn nào, không tồn tại trong thư viện, một liên kết tượng trưng sẽ được tạo trong thư viện.
  • nếu có các mục trong thư viện, không tồn tại trong bất kỳ thư mục nguồn nào (thực sự là một liên kết bị hỏng), mục đó sẽ bị xóa khỏi thư viện.

nhập mô tả hình ảnh ở đây

Danh sách so sánh có trọng lượng cực kỳ nhẹ (lập trình) và tài nguyên thấp. Tôi đã thử nghiệm tập lệnh với một vòng lặp nhanh hơn nhiều trong tập lệnh bên dưới, với một số mục khoảng 500 trong một cấp thư mục duy nhất, không tải thêm (đáng chú ý) gì.

Kịch bản và cách sử dụng

#!/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. Sao chép tập lệnh vào một tập tin trống, lưu nó dưới dạng library_view.py
  2. Kiểm tra tập lệnh với thư mục được nhắm mục tiêu , để xem các thư mục được kết hợp trong, như là đối số đầu tiên , các thư mục nguồn làm đối số tiếp theo, ví dụ:

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

    Lệnh này sẽ hiển thị nội dung của các thư mục source1source2trong virtual_library.

  3. Nếu tất cả đều hoạt động tốt, hãy thêm nó vào các ứng dụng khởi động: Dash> Ứng dụng khởi động> Thêm. Thêm lệnh:

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

Ghi chú

Như đã đề cập, bạn có thể thêm nhiều hơn hai thư mục soure nếu muốn.

2. Phiên bản thủ công

Nếu bạn không muốn sử dụng tập lệnh nền vì một số lý do, bạn có thể cập nhật (đồng bộ hóa) thư mục thư viện theo cách thủ công, với chính xác cùng một lệnh dưới phím tắt, sử dụng tập lệnh bên dưới:

#!/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)

Chọn: Cài đặt hệ thống> "Bàn phím"> "Phím tắt"> "Phím tắt tùy chỉnh". Nhấp vào "+" và thêm lệnh yo một tổ hợp phím bạn chọn:

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

Jacob, tôi thực sự phải cảm ơn bạn vì đã đi ra ngoài và viết kịch bản cho tôi. Bây giờ tôi phải sử dụng nó, bạn đã làm việc. :-). Tôi sẽ cho nó một shot vào cuối tuần. Cảm ơn nhiều.
DanTheManDRH

1
@DanHutter Cảm ơn! Mong rằng bạn sẽ thích nó. Nếu có bất cứ điều gì, xin vui lòng cho tôi biết.
Jacob Vlijm

Xin chào Jacob, tôi vừa nâng cấp lên Ubuntu Gnome 16.10, tập lệnh này vẫn hoạt động hoàn hảo. Hiện đang sử dụng nó cho Âm nhạc, Hình ảnh và Tài liệu! Cám ơn bạn một lần nữa.
DanTheManDRH

@DanHutter Cảm ơn bạn đã đề cập, nghe rất hay!
Jacob Vlijm

3

Bạn có thể cài đặt unionfs-fusecho việc này:

sudo apt-get install unionfs-fuse 

Gắn:

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

Nó sẽ nhóm tất cả nội dung từ thư mục1thư mục2 (hoặc nhiều hơn nếu bạn muốn) đến điểm gắn kết của bạn

Ôm

sudo umount /mount/point
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.