Một giải pháp tốt để gắn thẻ tập tin trong linux là gì? [đóng cửa]


71

Tôi đã tìm cách gắn thẻ các tệp của mình và tìm kiếm / lọc chúng dựa trên các thẻ đó.

Dưới đây là các yêu cầu ( cập nhật ) của tôi :

  • bất kỳ tập tin nào người dùng có thể đọc được đều có thể được gắn thẻ tự do
  • người dùng có thể tìm kiếm các tệp khớp với một hoặc một số thẻ
  • các tệp có thể được di chuyển xung quanh mà không làm mất các thẻ được liên kết trước đó
  • hệ thống có thể được sao lưu dễ dàng
  • không phụ thuộc vào bất kỳ môi trường máy tính để bàn nào
  • Nếu có bất kỳ gui nào tham gia, phải có một dự phòng cli

Tôi đã hy vọng một số tin tặc hệ thống tập tin & coreutils cơ bản để xử lý việc này, nhưng tôi chưa nghĩ đến điều này đủ khó.
Trong khi đó, tôi sẽ xem xét beagle và metatracker, đã được đề cập ở đây, và xem cách chúng thực hiện.


Ok vì vậy beagle có sự phụ thuộc rất lớn, và trình theo dõi thì ổn, nhưng vẫn có một số phụ thuộc mà tôi không thích ...

Đã thực hiện một số nghiên cứu thêm, và cách để đi rất có thể là các thuộc tính tệp mở rộng .
Đó là một giải pháp tự nhiên cho hầu hết các hệ thống tập tin gần đây, nhưng chúng chưa được hỗ trợ rất tốt (hầu hết các coreutils phá hủy chúng theo mặc định, ví dụ cp cần cờ -a để giữ chúng). Tôi muốn nghe một số suy nghĩ về việc sử dụng chúng trong khi tôi tự mình thử một số bản hack, mặc dù điều này có thể đảm bảo một câu hỏi mới.


2
Các vấn đề với thuộc tính tệp mở rộng: (i) Theo kinh nghiệm của tôi, chúng gây phiền toái khi bạn muốn sao lưu. (ii) Bạn không thể sử dụng chúng khi bạn di chuyển giữa các hệ thống tập tin. Ngoài ra, họ sẽ là điều đúng.
Charles Stewart


Trong Diễn đàn PC-BSD, có tham khảo phiên bản 2010 của câu hỏi này: PC-BSD, các thuộc tính mở rộng và gắn thẻ; Cách tiếp cận của OpenMeta và Apple
Graham Perrin

Câu trả lời:


13

Không rõ bạn muốn tìm kiếm kiểu gì. Nếu bạn muốn nó hoạt động ở bất cứ đâu trong unix, thay vào đó chỉ là thư mục chính của bạn và bạn chỉ muốn thực hiện các tìm kiếm dựa trên tên đường dẫn, thì lược đồ sau có thể thực hiện được, với một chút hack shell và sử dụng tiêu chuẩn locatedb:

  1. Mỗi thư mục chứa ít nhất một tệp được gắn thẻ cần một thư mục con tiêu chuẩn, giả sử .path-tags;
  2. Mỗi tệp trong thư mục $ FILE có liên kết $ TAG (không chứa char _) có một liên kết$TAG_$FILE -> ../$FILE

Tôi để lại các chi tiết của locate-tagkịch bản cho bạn; nó phải là một hoặc hai hoặc ba lớp, chỉ sử dụng locatelệnh hack và shell. (Nếu bạn quan tâm, tôi có thể viết một cái).

Một số mánh khóe KDE đã nói về loại lược đồ này cho siêu dữ liệu, mặc dù tôi không nhớ các chi tiết.

Cũng có thể thực hiện các bài kiểm tra nội dung phức tạp hơn, dựa trên sơ đồ này với một kịch bản tương tự được bao quanh find.

Suy nghĩ về các yêu cầu cập nhật

  1. bất kỳ tập tin nào người dùng có thể đọc được đều có thể được gắn thẻ tự do - Có, sẽ không có vấn đề gì
  2. người dùng có thể tìm kiếm các tệp khớp với một hoặc một số thẻ - Tương tự như vậy
  3. các tệp có thể được di chuyển xung quanh mà không làm mất các thẻ được liên kết trước đó - Các thư mục mà chúng sinh sống có thể được di chuyển tự do, nhưng nếu tệp được di chuyển khỏi thư mục, chúng tôi sẽ gặp rắc rối. Nếu các thẻ có dạng $TAG_$INODE_$FILEvà chúng ta có một cách hiệu quả để tìm đường dẫn nào có một nút cho trước , thì chúng ta có thể làm điều này, chỉ mất các thẻ nếu chúng ta di chuyển khỏi các hệ thống tệp. Sao chép tập tin có thể gây ra một số rắc rối và điều này rõ ràng phức tạp hơn đề xuất ban đầu của tôi.
  4. hệ thống có thể được sao lưu dễ dàng - về cơ bản không khó.
  5. không phụ thuộc vào bất kỳ môi trường máy tính để bàn - none
  6. nếu có bất kỳ gui nào tham gia, thì phải có một dự phòng cli - đó là nơi chúng ta sống!

Postcript Tập tin "đảo ngược inode" được mô tả bởi liên kết (2) mà bạn đã cho tôi thấy trong câu trả lời của bạn cho (1) có thể được sử dụng để cung cấp một số cơ sở hạ tầng bổ sung. Chúng tôi có thể chạy một dịch vụ trên tệp tra cứu ngược, kiểm tra xem mỗi nút được cung cấp trong tên tệp của thẻ có khớp với nút của tệp (nếu có) mà thẻ trỏ tới. Nếu không có kết quả khớp thì có thể thực hiện phẫu thuật cần thiết (liệu inode có còn tồn tại không? Ở đâu?) Và tệp tra cứu ngược bị đột biến hoặc được tạo lại và các liên kết thẻ được cập nhật.

Tôi dự đoán một trường hợp khó khăn: nếu tệp được gắn thẻ không phải là nơi các thẻ nói rằng nó sẽ tồn tại, thì tệp tra cứu ngược lại cho biết nó vẫn tồn tại, nhưng tệp prodigal không phải là nơi tệp tra cứu cho biết, tệp tra cứu nằm ngoài ngày? Có một vài cách để xử lý trường hợp này, không có lý tưởng rõ ràng. Ngoài ra, toàn bộ nhiệm vụ này dường như là thứ mà Perl rất phù hợp với ...


1
Điều này thật tuyệt và tôi cũng đã suy nghĩ về việc sử dụng symlink. Vấn đề là, một tập tin không thể được di chuyển xung quanh mà không bị mất thẻ. Lý tưởng nhất, các thẻ sẽ là đường dẫn không xác định và việc tìm kiếm thẻ sẽ trả về tệp thực tế, chứ không phải là một liên kết tượng trưng chết ... PS: Tôi hoàn toàn dành cho giải pháp dựa trên hệ vỏ, nhưng tôi nghĩ rằng miền vấn đề khiến nó trở nên như vậy 'd được khá đau đớn chỉ duy trì thông qua kịch bản shell, tôi hy vọng ai đó chứng minh tôi sai
julien

Tôi đã chỉnh sửa câu hỏi của mình để (hy vọng) làm cho nó rõ ràng hơn về loại giải pháp tôi đang theo đuổi. chúc mừng
julien

Chết tiệt, tôi chưa bao giờ nhận ra rằng các nút như các hướng dẫn liên tục cho các tệp, đó là thức ăn để suy nghĩ!
julien

1
inodes là uids, nhưng chúng được gắn với một fs nhất định, vì vậy chúng không phải là hướng dẫn. Đây không phải là một điều xấu, vì sao chép, sao lưu, lưu trữ, & c, có nghĩa là các tệp bị trùng lặp và được lưu trữ trong các tệp khác và bạn muốn trạng thái fs cung cấp cho bạn đủ thông tin để loại bỏ kết quả.
Charles Stewart

1
Tôi đã bỏ lỡ punchline, phần mềm nào có thể đáp ứng điều này? Tôi đã hy vọng cho một cái gì đó tôi có thể sử dụng tình cờ mà không cần viết cơ sở hạ tầng của riêng tôi. (Nhưng rõ ràng để tôi có thể tự điều chỉnh nó khi muốn)
ThorSummoner

22

Tôi vừa phát hành bản alpha của chương trình mới cố gắng cung cấp chức năng này. Nó hiện đáp ứng một số, nhưng không phải tất cả, các yêu cầu của bạn. Nó có thể được quan tâm cho bạn anyway. Nó cung cấp một công cụ dòng lệnh để gắn thẻ và một hệ thống tệp ảo để duyệt (nơi các thẻ được đại diện bởi các thư mục).

http://www.tmsu.org/

bất kỳ tập tin nào người dùng có thể đọc được đều có thể được gắn thẻ tự do

Đúng.

người dùng có thể tìm kiếm các tệp khớp với một hoặc một số thẻ

Đúng. Thông qua công cụ dòng lệnh hoặc bằng cách duyệt các thư mục thẻ trong hệ thống tệp ảo.

các tệp có thể được di chuyển xung quanh mà không làm mất các thẻ được liên kết trước đó

Không. Tuy nhiên, ứng dụng lưu trữ dấu vân tay của các tệp được gắn thẻ được sử dụng để giúp xác định các tệp đã di chuyển. Lệnh 'sửa chữa' được cung cấp sẽ cập nhật đường dẫn của các tệp đã di chuyển. (Rõ ràng cơ chế này bị hỏng nếu một tệp được di chuyển và sửa đổi.)

hệ thống có thể được sao lưu dễ dàng

Đúng. Đó là một tệp cơ sở dữ liệu Sqlite 3 đơn giản.

không phụ thuộc vào bất kỳ môi trường máy tính để bàn nào

Đúng. Không phụ thuộc và vì nó có thể được chạy như một hệ thống tệp ảo, nó có sẵn để xem qua như một hệ thống tệp trong bất kỳ chương trình nào hỗ trợ các liên kết tượng trưng.

Nếu có bất kỳ gui nào tham gia, phải có một dự phòng cli

Hiện tại không có GUI.


Trông rất thú vị. Bạn có biết làm thế nào để thực hiện khả năng di chuyển các tệp xung quanh mà không làm mất các thẻ liên quan không?
sinh viên

@student: hiện tại có lệnh 'sửa chữa' liên quan đến các tệp được di chuyển và sửa đổi. (Tuy nhiên, nếu cả hai bạn di chuyển và sửa đổi một tập tin, điều này sẽ không được phát hiện.)
Paul Ruane

Có lẽ người ta có thể viết các biến thể của mv, cprmđó xử lý thẻ của bạn cũng như (gọi họ là ví dụ tmv, tcptrm) thì người ta sẽ không bị mất thẻ ít nhất nếu có ai sử dụng dòng lệnh để di chuyển các file xung quanh ...
sinh viên

@student TMSU hiện nay bao gồm một số kịch bản mà thực hiện các hoạt động hệ thống tập tin trong khi vẫn giữ các cơ sở dữ liệu cập nhật: tmsu-fs-mv, tmsu-fs-rmtmsu-fs-merge.
Paul Ruane

Xin lỗi câu hỏi của tôi nhưng ... ¿tại sao không chỉ đơn giản là sao chép thẻ khi di chuyển tệp tự động? Tôi có cần cập nhật thủ công các tập tin khi di chuyển không?
erm3nda

6

Tôi nghĩ rằng điều này có thể đáp ứng tất cả các yêu cầu của bạn. Trong mọi trường hợp, nó là một đoạn mã hay:

http://pages.stern.nyu.edu/~marriaga/software/oyepa

GUI yêu cầu Qt, nhưng có một ứng dụng dòng lệnh để tìm kiếm và thực tế là tất cả các thẻ thực sự có trong tên tệp khiến cho việc thao tác các thẻ | tệp từ cli trở nên tầm thường.


1
Từ trang: "Thông tin thẻ được lưu trữ trong tên tệp" - vậy tên tệp được gắn thẻ trông như thế nào? BTW, các liên kết trên trang đó rất thú vị: +1.
Charles Stewart

báo cáo cho hóa đơn [công việc, hr, do tôi sản xuất] .odt
laramichaels

@laramichaels Tôi biết điều này khá cũ, nhưng tôi thấy cách tiếp cận rất thú vị. Nếu nó không thiếu tài liệu (không có nơi nào giải thích cách đặt tên tệp hoạt động) tôi sẽ chấp nhận nó. Nếu bạn có bất kỳ tin tức nào về các công cụ như vậy, xin vui lòng cho tôi biết,
TomCho

6

Không ai đề cập, nhưng bạn chắc chắn nên xem xét các thuộc tính hệ thống tệp mở rộng. ví dụ ext4 có chúng. có các công cụ getfattr và setfattr để đối phó với chúng. Tất nhiên bạn sẽ phải viết một số tập lệnh shell để tìm kiếm các tập tin được gắn thẻ đôi khi. Về các câu hỏi được đề cập, tất cả các câu trả lời là "Có". Bạn chỉ nên tính đến việc nó phụ thuộc vào hệ thống tệp.


Dữ liệu inode của tệp nên được xác định một cách chính xác để làm điều đó trên ext4 fs, nhưng sẽ không cung cấp bất kỳ khả năng tương thích ngược nào. Đúng?
erm3nda

6

Ngạc nhiên rằng không ai đã đề cập đến TagSpaces . Nó đáp ứng tất cả các yêu cầu của bạn vì các thẻ được lưu trữ trong tên tệp và TagSpaces là đa nền tảng.

TagSpaces


1
không gian tag không có dự phòng CLI, vì vậy nó không đáp ứng tất cả các yêu cầu. Hay nó có CLI? Nếu có, xin vui lòng, cho tôi biết!
TomCho

Không có hỗ trợ cho ứng dụng trong Debian 9 apt. Có gì sắp tới không? - - Bạn có thể cài đặt ứng dụng theo các hướng dẫn này tagspaces.org/products
Léo Léopold Hertz

Bạn có thể vui lòng so sánh đề xuất của bạn với Linux Desktop Search Tools không?
Léo Léopold Hertz

5

Bạn có thể không cần phải cài đặt toàn bộ máy tính để bàn KDE cho thư viện gắn thẻ của họ, Nepomuk. Bạn vẫn sẽ phải cài đặt các thư viện cơ sở KDE, mặc dù ...


1
vâng, tôi đã hy vọng tìm được một giải pháp thay thế cho vấn đề này, nhưng nó không có vẻ như vậy ...
julien

2

Bài viết gần đây trên Linux Desktop Search Tools có đề cập rằng Tracker hỗ trợ gắn thẻ. Thật không may, nó được cho là đã bị hỏng một nửa trong phiên bản cũ mà họ đã thử nghiệm. Có lẽ nó đã được sửa bây giờ?

  1. Không rộng hệ thống.
  2. Bạn có thể sao lưu nó.
  3. Nó được gói cùng với Gnome.

2

Hãy thử Beagle . Tôi thấy nó là khá tốt.

Nó có thể không đáp ứng tất cả các yêu cầu và tôi không chắc những gì có thể. Ví dụ: các tập tin FIFO có hỗ trợ các thuộc tính mở rộng không? Nếu họ không, Beagle có cơ sở dữ liệu dự phòng.


Beagle có thể xử lý các tập tin không thường xuyên?
Charles Stewart

@Charles Stewart - bạn có nghĩa là các tập tin phi văn bản?
pcapademia

Không, ý tôi là các tập tin thiết bị, liên kết tượng trưng, ​​FIFO, & c
Charles Stewart

Liên kết đó không đề cập đến một dự án về tổ chức tài liệu.
gièm pha



1

Vì vậy, bạn sẽ không tìm thấy sự tích hợp Nepomuk trong gnome, tại dòng lệnh hoặc các nơi khác trong Linux.

Ngược lại, với Tracker bạn sẽ không tìm thấy AFAIK tích hợp. Không chắc chắn về CLI.

Thật không may, câu trả lời dường như là "không".

Đáng tiếc hơn nữa, điều này không có nghĩa là có một cơ hội tốt ở đây để xây dựng một cơ hội. Các tiện ích dòng lệnh Linux không có nhiều điểm chung với trình quản lý tệp GUI, vì vậy về mặt kiến ​​trúc, không có thành phần chung nào có thể được mở rộng để hỗ trợ khái niệm này.


0

Tôi đã thực hiện một chương trình nhỏ sử dụng SQLite cho mục đích này. Nó giải quyết nhu cầu của tôi, nhưng có lẽ nó cũng giúp bạn:

https://github.com/alvatar/dfym

Vấn đề duy nhất với phương pháp này là không đồng bộ hóa với di chuyển và xóa, nhưng nó giải quyết vấn đề cho các tệp tương đối tĩnh.


0

TMSU

TMSU là một công cụ để gắn thẻ các tệp của bạn. Nó cung cấp một tiện ích dòng lệnh đơn giản để áp dụng các thẻ và hệ thống tệp ảo để cung cấp cho bạn chế độ xem dựa trên thẻ của các tệp từ bất kỳ chương trình nào khác.

TMSU không thay đổi các tệp của bạn theo bất kỳ cách nào: chúng không thay đổi trên đĩa hoặc trên mạng, bất cứ nơi nào bạn đặt chúng. TMSU duy trì cơ sở dữ liệu của riêng mình và bạn chỉ cần có được một chế độ xem bổ sung, bạn có thể gắn kết ở nơi bạn thích, dựa trên các thẻ bạn thiết lập.

Ngạc nhiên không ai nhắc đến nó.


1
bạn đã bỏ lỡ nó ... đó là câu trả lời được bình chọn cao nhất
cá nóc

-1

Tôi khuyên bạn nên xem xét một hệ thống kiểm soát phiên bản, chẳng hạn như Subversion cho các loại tính năng trên và ngoài hệ thống tệp. Một số có thể phù hợp với bạn hơn những người khác nhưng nói chung:

  • Nhiều hỗ trợ gắn thẻ (chắc chắn lật đổ).
  • Nhiều người là nền tảng chéo; Windows, Mac, Linux, khá nhiều Unix.
  • Nhiều người có cả giao diện người dùng GUI và máy khách dòng lệnh.
  • Nhiều người đã có các ràng buộc cho ngôn ngữ lập trình / kịch bản yêu thích của bạn.
  • Nhiều người dễ dàng sao lưu.
  • Nhiều người được thiết kế để có thể dễ dàng chia sẻ theo cách này hay cách khác.
  • Nhiều cho phép bạn kiểm soát truy cập.
  • Bạn không phải phát minh lại bánh xe.
    • Bạn học và sử dụng các lệnh / công cụ tiêu chuẩn đã được hàng triệu người sử dụng.
  • Bạn có thể cài đặt nó ngay hôm nay cho repo hệ điều hành yêu thích của bạn; cài đặt apt-get, cài đặt yum
  • Bạn cũng có được quản lý phiên bản "miễn phí".

Một ví dụ cli với Subversion: ~/svn/atestrepository: $ svn propset mytag "something" dir1 property 'mytag' set on 'dir1' $ svn propset myothertag "nothing" dir1/file1 property 'myothertag' set on 'dir1/file1' $ svn propset anemptytag "" dir1/file2 property 'anemptytag' set on 'dir1/file2'

$ svn propget -R mytag dir1 - something ~/svn/atestrepository: $ svn propget -R myothertag dir1/file1 - nothing $ svn propget -R anemptytag dir1/file2 - $ svn proplist dir1/file2 Properties on 'dir1/file2': anemptytag svn:keywords

Tôi không khuyên các công cụ này dành cho các tệp nhị phân lớn (cỡ gigabyte) thường xuyên thay đổi nhưng đối với mọi thứ khác, chúng đã được chứng minh tốt và có quy mô ở kích thước rất lớn.

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.