如何標記 Unix 系統上的任何文件?
我試圖找出在 GNU/Linux 中標記文件的最佳解決方案。這是我想要實現的特定目標。我下載所有電影並將它們保存在外部 SSD 上。我將它們分類在兩個目錄中:“watched”和“to_watch”。但是,我想為每部電影分配屬性,例如(但不限於):主要演員、導演、流派。這樣,如果我有大量的文件,並且我有心情觀看斯科塞斯導演的電影,我可以只顯示包含標籤“斯科塞斯”的電影。
以下是我的一些要求:
- 我希望解決方案獨立於我正在使用的本地電腦。例如,如果我將我的外部 SSD 帶給我的朋友,他也有 Unix 系統(並安裝了標籤所需的解決方案),他的電腦也將能夠解釋我生成的所有標籤。
- 我想要一個 CLI 選項。
- 如果我更改文件的位置,標籤仍然保留在文件中。
- 我可以為文件分配多個標籤。
- 我可以標記任何格式的文件。
- 我也可以標記一個目錄(不僅是文件)。
兩件事情:
==
更原生的方法當然是使用許多 Unix 文件系統的特性來保存所謂的擴展屬性或只是xattrs。
getfattr
您可以使用命令行程序從文件中查詢、設置、修改和刪除這些屬性setfattr
(在Linux下,不太了解*BSD如何處理這些);他們的手冊頁對您來說應該很有趣。然而,這並沒有那麼有用——畢竟,你有很多文件,你以某種方式標記了一些資訊,但需要坐在控制台上嘗試再次將它們取出。
因此,您實際需要的不僅僅是一種標記文件的方法,您還需要一些東西來實際對這些資訊做一些有用的事情,管理它等等。
==
您所描述的功能是電影數據庫,因此,媒體伺服器可能是最有用的解決方案。如果您可以將可能的平台數量限制為一個(或兩個),例如 x86_64(可能還有 arm64?),您也可以在外部硬碟驅動器上放置一個容器,該容器僅包含執行電影數據庫軟體所需的所有內容. 所以你的朋友就可以開始了(不知道這樣的東西需要什麼形狀——也許是 DLNA 伺服器?)。我對這類事情沒有經驗。
所以,我要做的,就是坐下來寫你想要的軟體。聽起來很瘋狂,但還不錯,考慮到任何帶有 Unix 的現代 PC 風格的硬體都可以訪問一些現代 Python3。
==
如上所述,您可以使用擴展文件系統屬性來儲存有關文件的資訊——在文件“文件系統條目”本身內。這樣,當您在驅動器上移動文件時,它會保留在文件中。
但是,正如您所說,您可能想從外部驅動器執行某種 GUI/TUI,無論如何,這樣做並沒有太大的好處。因此,一個簡單的 SQLite 數據庫(
sqlite3
每個 Python 安裝都附帶)就可以了。然後,您只需編寫一個簡短的工具來查找數據庫文件,查找與之相關的媒體文件,然後添加一些函式來掃描尚不屬於數據庫的文件,添加它們,也許從IMDB 的 API。當然,一個漂亮的查詢界面也很好,所以你可以選擇“文本冒險”風格,或者你可以使用Textual
(新的,令人興奮的,可能有點實驗性)或urwid
;兩者都是純 Python,如果我沒記錯的話,所以在不同的機器上執行東西應該是微不足道的!