web-dev-qa-db-ja.com

Linuxでのファイルのタグ付けのための良い解決策は何ですか?

私は自分のファイルにタグを付け、それらのタグに基づいてファイルを検索/フィルタリングする方法を探していました。

これが私の(updated)要件です:

  • ユーザーが読み取り可能な任意のファイルに自由にタグを付けることができます
  • ユーザーは1つまたは複数のタグに一致するファイルを検索できます
  • 以前に関連付けられたタグを失うことなく、ファイルを移動できます
  • システムは簡単にバックアップできます
  • デスクトップ環境に依存しない
  • gUIが含まれている場合は、CLIフォールバックが必要です

私はこれを処理するためにいくつかの基本的なファイルシステムとcoreutilsハッカーを望んでいましたが、これについてはまだ十分に考えていません。
その間に、ここで言及したビーグルとメタトラッカーを確認し、それらがどのように機能するかを確認します。


ビーグルには大きなgnome依存関係があり、トラッカーは大丈夫ですが、それでも私が気に入らない依存関係がいくつかあります...

さらに調査を行っており、その方法は 拡張ファイル属性 である可能性があります。
これは最近のほとんどのファイルシステムのネイティブソリューションですが、まだ十分にサポートされていません(ほとんどのcoreutilsはデフォルトでそれらを破棄します。たとえば、cpはそれらを保持するために-aフラグを必要とします)。これは新しい質問に値するかもしれませんが、自分でハックを試してみながら、それらを使用することについての考えを聞きたいと思います。

75
julien

どのような検索が必要かは明確ではありません。ホームディレクトリだけでなく、UNIXのどこでも機能させたい場合、パス名ベースの検索のみを実行したい場合は、次のスキームが機能します。少しのシェルハッカーを使用し、標準のlocatedb

  1. 少なくとも1つのタグ付きファイルを含む各ディレクトリには、標準のサブディレクトリが必要です。たとえば、.path-tags;
  2. リンク$ TAG(文字_を含むことはできません)を持つディレクトリ$ FILE内の各ファイルには、リンク$TAG_$FILE -> ../$FILEがあります。

locate-tagスクリプトの詳細はあなたにお任せします。 locateコマンドとShellハッカーのみを使用して、2行または3行にする必要があります。 (興味があれば、私が書いてもいいです)。

詳細は思い出せませんが、KDEの一部の人物がメタデータのこの種のスキームについて話しました。

また、findで囲まれた同様のスクリプトを使用して、このスキームに基づくより洗練されたコンテンツ検査テストを実行することもできます。

更新された要件に関する考え

  1. ユーザーが読み取り可能な任意のファイルに自由にタグを付けることができます-はい、問題ありません
  2. ユーザーは1つまたは複数のタグに一致するファイルを検索できます-同様に
  3. 以前に関連付けられたタグを失うことなくファイルを移動できます-ファイルが存在するディレクトリは自由に移動できますが、ファイルをディレクトリから移動すると問題が発生します。タグの形式が$TAG_$INODE_$FILEで、 特定のiノードを持つパスを見つける効率的な方法 がある場合、これを行うことができ、ファイルシステムから移動した場合にのみタグが失われます。ファイルをコピーすると問題が発生する可能性があり、これは元の提案よりも明らかに複雑です。
  4. システムは簡単にバックアップできます-本質的に難しくありません。
  5. デスクトップ環境に依存しない-なし
  6. GUIが関係している場合は、CLIフォールバックが必要です-ここが私たちの住む場所です!

Postscriptリンクで説明されている「reverse-inode-lookup」ファイル (2) への回答に私を示しました- (1) を使用して、追加のインフラストラクチャを提供できます。タグのファイル名で指定された各iノードが、タグが指すファイル(存在する場合)のiノードと一致することをチェックする逆ルックアップファイルでサービスを実行できます。一致しない場合、必要な手術を実行でき(inodeがまだ存在しますか?どこにありますか?)、逆ルックアップファイルが変更または再生成され、タグシンボリックリンクが更新されます。

私は1つのトリッキーなケースを予想します:タグ付きファイルがあるべき場所にタグ付けされたファイルがない場合、逆ルックアップファイルはまだ存在すると言いますが、放棄ファイルはルックアップファイルが言うところになく、ルックアップファイルはありません日付?このケースを処理する方法はいくつかありますが、明らかに理想的な方法はありません。これとは別に、この全体のタスクは、Perlが適しているようなものです...

13
Charles Stewart

この機能を提供しようとする新しいプログラムのアルファ版をリリースしました。現在、すべてではなく一部の要件を満たしています。それはとにかくあなたに興味があるかもしれません。タグ付けのためのコマンドラインツールとブラウジングのための仮想ファイルシステムを提供します(タグはディレクトリで表されます)。

http://www.tmsu.org/

ユーザーが読み取り可能な任意のファイルに自由にタグを付けることができます

はい。

ユーザーは1つまたは複数のタグに一致するファイルを検索できます

はい。コマンドラインツールを使用するか、仮想ファイルシステムのタグディレクトリを参照します。

以前に関連付けられたタグを失うことなく、ファイルを移動できます

いいえ。ただし、アプリケーションは、移動されたファイルの識別に役立つタグが付けられたファイルのフィンガープリントを保存します。移動したファイルのパスを更新する「修復」コマンドが提供されています。 (ファイルが移動および変更された場合、明らかにこのメカニズムは機能しません。)

システムは簡単にバックアップできます

はい。シンプルなSqlite 3データベースファイルです。

デスクトップ環境に依存しない

はい。依存関係はなく、仮想ファイルシステムとして実行できるため、シンボリックリンクをサポートする任意のプログラムでファイルシステムとして閲覧できます。

gUIが含まれている場合は、CLIフォールバックが必要です

現在GUIはありません。

25
Paul Ruane

誰も言及していませんが、拡張ファイルシステムの属性を確認する必要があります。たとえばext4にはそれらがあります。それらに対処するためのツールgetfattrとsetfattrがあります。もちろん、sometagでタグ付けされたファイルを検索するために、いくつかのシェルスクリプトを記述する必要があります。言及された質問に関しては、すべての回答が「はい」です。ファイルシステムに依存していることだけを考慮に入れる必要があります。

7
alik

誰も言及していないことに驚いた TagSpaces 。タグはファイル名に保存され、TagSpacesはクロスプラットフォームなので、すべての要件を満たします。

TagSpaces

6
Dan Dascalescu

これはmightがすべての要件を満たしていると思います。いずれにせよ、それはクールなコードです:

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

GUIにはQtが必要ですが、検索用のコマンドラインアプリケーションがあり、すべてのタグが実際にファイル名に含まれているため、CLIからタグ|ファイルを操作するのは簡単です。

6
laramichaels

タグ付けライブラリであるNepomukのためにKDEデスクトップ全体をインストールする必要はおそらくないでしょう。ただし、KDEベースライブラリをインストールする必要があります...

5
anon

Beagle を試してください。かなり良いと思います。

すべての要件を満たしていない可能性があり、何が可能かはわかりません。たとえば、FIFOファイルは拡張属性をサポートしていますか?サポートしていない場合、 Beagle はフォールバックデータベースを持っています。

2
pcapademic

他のいくつかの代替案は tagasistanttagfs または dantalian です。

2
student

Linuxデスクトップ検索ツール に関するこの最近の記事は、 Tracker がタグ付けをサポートしていることを述べています。残念ながら、彼らがテストした古いバージョンでは半分壊れているはずです。多分それは今修正されていますか?

  1. システム全体ではありません。
  2. あなたはそれをバックアップすることができます。
  3. Gnomeにバンドルされています。
2
Iain

したがって、GNOME、コマンドライン、またはLinuxの他の場所でNepomuk統合を見つけることはできません。

逆に、Trackerではkde統合AFAIKは見つかりません。 CLIではわかりません。

残念ながら、答えは「いいえ」のようです。

さらに残念なことに、これは1つを構築する良い機会があることを意味しません。 Linuxコマンドラインユーティリティは、たとえばGUIファイルマネージャとあまり共通点がないため、アーキテクチャ上、概念をサポートするために拡張できる共通のコンポーネントはありません。

1
pbr

この目的のためにSQLiteを使用する小さなプログラムを作成しました。それは私のニーズを解決しましたが、おそらくあなたにも役立ちます:

https://github.com/alvatar/dfym

このアプローチの唯一の問題は、移動や削除と同期しないことですが、比較的静的なファイルの問題を解決します。

0
alvatar

[〜#〜] tmsu [〜#〜]

TMSUは、ファイルにタグを付けるためのツールです。タグを適用するための簡単なコマンドラインユーティリティと、他のプログラムからのファイルのタグベースのビューを提供する仮想ファイルシステムを提供します。

TMSUがファイルを変更することはありません。ファイルは、ディスクまたはネットワーク上でどこに置いても変更されません。 TMSUは独自のデータベースを維持し、追加のビューを取得するだけで、設定したタグに基づいて、好きな場所にマウントできます。

誰もそれについて言及していないことに驚いた。

0
justsomeguy