Linux 的類別而不是目錄或語意檔案系統

資料分類本身就是一個有趣的研究主題。 我喜歡收集看似必要的信息,我一直嘗試為我的文件創建邏輯目錄層次結構,有一天在夢中我看到一個漂亮且方便的程序,用於為文件分配標籤,我決定我不能活了再這樣下去。

分層檔案系統的問題

用戶經常面臨選擇在哪裡保存下一個新文件的問題以及查找自己的文件的問題(有時文件名根本不是為了讓人記住)。

擺脫這種情況的一種方法可能是語義檔案系統,它通常是傳統檔案系統的附加元件。 其中的目錄被語意屬性(也稱為標籤、類別和元資料)取代。 我會更頻繁地使用“類別”這個詞,因為… 在檔案系統的上下文中,「標籤」這個詞有時有點奇怪,特別是當「子標籤」和「標籤別名」出現時。

為文件分配類別在很大程度上消除了儲存和搜尋文件的問題:如果您至少記住(或猜測)分配給文件的類別之一,那麼該文件永遠不會從視圖中消失。

此前,這個話題在 Habré 上不只一次被提出(時間, , , 等等),在這裡我描述我的解決方案。

實現之路

在提到的夢想之後,我立即在筆記本中描述了提供必要的類別工作的命令介面。 然後我決定在一兩週內我可以使用 Python 或 Bash 編寫原型,然後我必須在 Qt 或 GTK 中建立一個圖形 shell。 現實一如既往地殘酷得多,開發也被推遲了。

最初的想法是首先製作一個具有方便簡潔的命令列介面的程序,用於創建、刪除類別、為文件分配類別以及從文件中刪除類別。 我調用了該程式 葡萄.

第一次嘗試創建 葡萄 結果一無所獲,因為大量的時間開始花在工作和大學上。 第二次嘗試已經有所收穫:為了碩士論文,我成功地完成了計劃的項目,甚至製作了 GTK shell 的原型。 但事實證明該版本非常不可靠且不方便,因此必須重新考慮很多事情。

實際上,我自己使用了第三個版本很長一段時間,將數千個文件轉移到類別中。 實現的 bash 補全也大大促進了這一點。 但一些問題仍然存在,例如缺乏自動分類和儲存同名檔案的能力,而該程式已經在其自身的複雜性下屈服了。 這就是我為什麼需要解決複雜的軟體開發問題:撰寫詳細的需求、開發功能測試系統、研究包裝說明等等。 我現在已經制定了我的計劃,以便將這個不起眼的創作呈現給自由社區。 具體的文件管理,例如透過類別概念進行管理,會引發意想不到的問題和問題,並在解決它們時 葡萄 圍繞著它本身又催生了五個項目,其中一些將在本文中提到。 到目前為止 葡萄 我還沒有購買圖形外殼,但從命令列使用文件類別的便利性對我來說已經超過了常規圖形文件管理器的任何優勢。

使用示例

讓我們從簡單的開始 - 建立一個類別:

vitis create Музыка

讓我們添加一些組合作為範例:

vitis assign Музыка -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"

您可以使用“show”子命令查看“音樂”類別的內容:

vitis show Музыка

您可以使用“open”子命令來播放它。

vitis open Музыка

因為如果「音樂」類別中只有一個文件,則只會啟動該文件。 為了使用預設程式開啟文件,我製作了一個單獨的實用程序 vts-fs-打開 (由於多種原因,像 xdg-open 或 mimeopen 這樣的標準工具不適合我;但是,如果有的話,您可以在設定中指定另一個實用程式來開啟通用檔案)。 該實用程式在具有不同工作環境的不同發行版上運作良好,因此我建議將其與 vitis 一起安裝。

也可以直接指定開啟檔案的程式:

vitis open Музыка --app qmmp

Linux 的類別而不是目錄或語意檔案系統

讓我們建立更多類別並使用“分配”新增文件。 如果將檔案指派給尚不存在的類別,系統會提示您建立它們。 使用 -yes 標誌可以避免不必要的請求。

vitis assign Программирование R -f "Введение в R.pdf" "Статистический пакет R: теория вероятностей и матстатистика.pdf" --yes

現在我們要將「數學」類別加入到檔案「統計套件R:機率論與數理統計.pdf」。 我們知道該檔案已被分類為“R”,因此我們可以使用 Vitis 系統中的類別路徑:

vitis assign Математика -v "R/Статистический пакет R: теория вероятностей и матстатистика.pdf"

幸運的是,bash 補全讓這一切變得簡單。

讓我們看看發生了什麼,使用 --categories 標誌查看每個文件的類別清單:

vitis show R --categories

Linux 的類別而不是目錄或語意檔案系統

請注意,檔案也已按格式、類型(組合格式)和檔案副檔名自動分類。 如果需要,可以停用這些類別。 我稍後一定會將他們的名字本地化。

讓我們在“數學”中添加一些其他內容以增加多樣性:

vitis assign Математика -f "Математический анализ - 1984.pdf" Перельман_Занимательная_математика_1927.djvu 

現在事情變得有趣了。 您可以使用並集、交集和減法運算來編寫表達式,即使用集合運算來取代類別。 例如,「Math」與「R」的交集將產生一個檔案。

vitis show R i: Математика

讓我們從“數學”中減去語言“R”的引用:

vitis show Математика  R  #или vitis show Математика c: R

我們可以漫無目的地將音樂和R語言結合:

vitis show Музыка u: R

-n 標誌可讓您透過數字和/或範圍從請求結果中「提取」所需的文件,例如, -n 3-7,或更複雜的東西: -n 1,5,8-10,13。 它通常與 open 子命令一起使用,它允許您從清單中開啟所需的檔案。

Linux 的類別而不是目錄或語意檔案系統

雖然我們不再使用傳統的目錄層次結構,但嵌套類別通常很有用。 讓我們在“數學”類別下創建一個子類別“統計”,並將該類別添加到相應的文件中:

vitis create Математика/Статистика

vitis assign Математика/Статистика -v "R/Введение в R.pdf"

vitis show Математика --categories

Linux 的類別而不是目錄或語意檔案系統

我們可以看到該文件現在的類別是“數學/統計”而不是“數學”(追蹤額外的連結)。

尋址完整路徑可能會很不方便,讓我們建立一個「全域」別名:

vitis assign Математика/Статистика -a Статистика

vitis show Статистика

Linux 的類別而不是目錄或語意檔案系統

不僅僅是普通文件

網路連結

為了統一任何資訊的存儲,至少對互聯網資源的連結進行分類是有用的。 這是可能的:

vitis assign Хабр Цветоаномалия -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yes

將在特殊位置建立一個文件,其中包含 HTML 頁面的標題和副檔名 .desktop。 這是 GNU/Linux 中傳統的捷徑格式。 此類捷徑會自動分類為網頁書籤。

當然,創建快捷方式是為了使用:

vitis open Цветоаномалия

執行該命令會導致新儲存的連結在瀏覽器中開啟。 網路資源的分類捷徑可以取代瀏覽器書籤。

文件碎片

對各個文件進行分類也很有用。 不錯的要求,嗯? 但目前的實現僅影響純文字檔案、音訊和視訊檔案。 假設您需要標記音樂會的某個部分或電影中的有趣時刻,那麼在使用 allocate 時,您可以使用標誌 -fragname、-start、-finish。 讓我們儲存「DuckTales」的螢幕保護程式:

vitis assign vitis assign -c Заставки -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Duck Tales intro"

vitis open Заставки

實際上,不會發生文件切割;而是建立指向片段的指標文件,該文件描述文件類型、文件路徑、片段的開頭和結尾。 片段指針的創建和打開被委託給我專門為此目的製作的實用程式 - 這些是 mediafragmenter 和 fragplayer。 第一個創建,第二個打開。 在音訊和視訊錄製的情況下,媒體檔案是使用VLC播放器從某個位置啟動到某個位置的,因此它也必須在系統中。 起初我想基於mplayer來做這個,但由於某種原因它在適當的時候定位很歪。
在我們的範例中,建立了檔案「Duck Tales intro.fragpointer」(它被放置在一個特殊的位置),然後從檔案的開頭播放一個片段(因為建立時沒有指定 –start)直到 59第二個標記,之後VLC 關閉。

另一個例子是當我們決定對一位著名藝術家在音樂會上的一場表演進行分類時:

vitis assign Лепс "Спасите наши души" -f Григорий Лепc - Концерт Парус - песни Владимира Высоцкого.mp4 --fragname "Спасите наши души" --start 00:32:18 --finish 00:36:51

vitis open "Спасите наши души"

打開後,文件將包含在所需位置,並在四分半鐘後關閉。

工作原理 + 附加功能

儲存類別

一開始考慮組織語意檔案系統時,我想到了三種方法:透過符號連結的儲存、透過資料庫、透過 XML 描述。 第一種方法獲勝,因為... 一方面,它很容易實現,另一方面,使用者有機會直接從檔案系統查看類別(這很方便也很重要)。 剛開始使用時 葡萄 “Vitis”目錄和“.config/vitis/vitis.conf”設定檔在使用者的主目錄中建立。 在 ~/Vitis 中建立與類別對應的目錄,並在這些類別目錄中建立到原始檔案的符號連結。 類別別名也只是它們的連結。 當然,主目錄中存在“Vitis”目錄可能不適合某些人。 我們可以切換到任何其他位置:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

在某種程度上,很明顯,對分散在不同位置的檔案進行分類毫無意義,因為它們的位置可能會發生變化。 因此,首先,我為自己創建了一個目錄,在那裡我愚蠢地轉儲了所有內容並給了它所有類別。 然後我決定在程序層面正式確定這一刻會很好。 這就是「文件空間」概念的出現。 剛開始使用時 葡萄 立即設定這樣一個位置(我們需要的所有文件都將儲存在那裡)並啟用自動保存不會有什麼壞處:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

如果沒有自動儲存,當使用「指派」子指令時,如果要將新增的檔案儲存到檔案空間,則需要 --save 標誌。

此外,您可以添加多個文件空間並更改它們的優先級;當存在大量文件並且它們存儲在不同的媒體上時,這非常有用。 這裡我不會考慮這種可能性;詳細資訊可以在程序幫助中找到。

語意檔案系統遷移

不管怎樣,理論上 Vitis 目錄和檔案空間有時可以從一個地方移動到另一個地方。 為了使它工作,我創建了一個單獨的實用程序 連結編輯器,它可以批量編輯鏈接,用其他路徑替換部分路徑:

cp -r /mnt/MyFavoriteDisk/Vitis/ ~/Vitis
link-editor -d ~/Vitis/ -f /mnt/MyFavoriteDisk/Vitis/ -r ~/Vitis/ -R
cp -r /mnt/MyFavoriteDisk/Filespace/ ~/MyFiles
link-editor -d ~/Vitis/ -f /mnt/FlashDrive-256/Filespace/ -r ~/MyFiles -R

在第一種情況下,當我們從 /mnt/MyFavoriteDisk/Vitis/ 移動到主目錄後,與別名關聯的符號連結將被編輯。 第二種情況,在變更檔案空間的位置後,Vitis 中的所有連結都根據替換部分路徑的請求變更為新連結。

自動類別

如果您運行命令 vitis service get autocategorization,可以看到預設情況下,自動分類是按格式(Format and Type)和檔案副檔名(Extension)指派的。

例如,當您需要在 PDF 中尋找某些內容或查看從 EPUB 和 FB2 儲存的內容時,這非常有用,您只需執行該請求即可

vitis show Format/MOBI u: Format/FB2

碰巧的是,標準的 GNU/Linux 工具(例如 file 或 mimetype)並不適合我,因為它們並不總是正確地確定格式;我必須根據文件簽名和擴展名來實現自己的實現。 一般來說,定義文件格式的主題是一個有趣的研究主題,值得單獨寫一篇文章。 現在我可以說,也許我還沒有提供對世界上所有格式的真正識別,但總的來說它已經運作良好。 確實,EPUB 現在將格式定義為 ZIP(一般來說,這是合理的,但實際上這不應被視為正常行為)。 目前,將此功能視為實驗性的並報告任何錯誤。 在奇怪的情況下,您始終可以使用檔案副檔名類別,例如 Extension/epub。

如果啟用按格式自動分類,則也會啟用按類型對某些格式進行分組的自動分類:「檔案」、「圖片」、「視訊」、「音訊」和「文件」。 這些子類別也將命名為本地化名稱。

什麼沒有說

葡萄 事實證明,它是一個非常多方面的工具,很難一次涵蓋所有內容。 讓我簡單提一下您還可以做些什麼:

  • 可以從文件中刪除和刪除類別;
  • 可以將表達式查詢的結果複製到指定目錄;
  • 文件可以作為程式運行;
  • show 指令有許多選項,例如,按名稱/修改日期或存取/大小/副檔名排序、顯示檔案屬性和原始檔案路徑、啟用隱藏檔案的顯示等;
  • 當您儲存 Internet 資源的連結時,您也可以儲存 HTML 頁面的本機副本。

完整的詳細資訊可以在用戶幫助中找到。

前途

懷疑論者常說「沒有人會自己設定這些標籤」。 用我自己的例子,我可以證明相反的情況:我已經對六千多個文件進行了分類,創建了一千多個類別和別名,這是值得的。 當一支球隊 vitis open План 打開您的待辦事項清單或使用一個命令 vitis open LaTeX 當你打開 Stolyarov 關於 LaTeX 佈局系統的書時,你會發現「以老式方式」使用檔案系統在道德上已經很困難了。

在此基礎上,出現了一些想法。 例如,您可以製作一個自動收音機,根據當前天氣、假期、星期幾、一天中的時間或一年中的時間打開主題音樂。 更接近主題的是音樂播放器,它了解類別,並且可以透過對類別和集合的操作來表達音樂。 建立一個守護程式來監視「下載」目錄並提供對新檔案進行分類是很有用的。 當然,我們應該製作一個正常的圖形語意檔案管理器。 曾幾何時,我甚至為企業創建了一個Web服務,用於文件的集體使用,但這不是優先事項,變得無關緊要,儘管它實現了很高的性能水平。 (由於重大變化 葡萄,它不再可用。)

這是一個小演示

Linux 的類別而不是目錄或語意檔案系統

結論

葡萄 這並不是第一次嘗試從根本上改變資料處理方式,但我認為實現我的想法並在 GNU GPL 授權下公開實現這一點很重要。 為了方便起見,我們為 x86-64 製作了 deb 軟體包;它應該適用於所有現代 Debian 發行版。 ARM 上有一些小困難(而所有其他與 葡萄,工作正常),但將來將為該平台(armhf)編譯一個工作包。 由於 Fedora 30 上的問題以及在許多 RPM 發行版上傳播的困難,我現在已經停止創建 RPM 包,但以後的包仍然會為至少其中的幾個製作。 在此期間您可以使用 make && make installcheckinstall.

感謝大家的關注! 我希望這篇文章和這個專案能夠有用。

連結到專案儲存庫

來源: www.habr.com

添加評論