Linuxのファイルタグ付けの良い解決策は何ですか?[閉まっている]


71

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

私の(更新された)要件は次のとおりです。

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

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


わかりましたので、ビーグルには巨大なgnome依存関係があり、トラッカーは大丈夫ですが、まだ私が好きではないいくつかの依存関係があります...

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


2
拡張ファイル属性の問題:(i)私の経験では、バックアップしたい場合に迷惑です。(ii)ファイルシステム間を移動するときは使用できません。それとは別に、彼らは正しいことです。
チャールズスチュワート


この質問の2010年版を参照したPC-BSDフォーラム:PC-BSD、拡張属性およびタグ付け。OpenMetaとAppleのアプローチ
グラハム・ペラン

回答:


13

どんな種類の検索が必要かは明確ではありません。ホームディレクトリだけでなく、Unixのどこでも動作させたい場合、およびパス名ベースの検索のみを行いたい場合は、次のスキームを実行できますlocatedb

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

locate-tagスクリプトの詳細はお任せします。locateコマンドとシェルハッカリーのみを使用して、2ライナーまたは3ライナーにする必要があります。(もし興味があれば、私はそれを書くことができる)。

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

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

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

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

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

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


1
これは素晴らしいことであり、私はシンボリックリンクの使用についても考えてきました。問題は、タグを失わずにファイルを移動できないことです。理想的には、タグはパスに依存せず、タグを検索すると、デッドシンボリックリンクではなく、実際のファイルが返されます。PS:私はすべてシェルベースのソリューションですが、問題ドメインはそれを実現するものだと思います「シェル・スクリプトによってのみ維持するためにかなりの痛みを伴うことdは、私は誰かが間違って私を証明している願っています
ジュリアン

私は自分の質問を編集して、(できれば)どのような解決策を求めているかを明確にした。乾杯
ジュリアン

くそー、ファイル用の永続的なGUIDのようなiノード、それが思考の糧だということに気付いたことはありませんでした!
ジュリアン

1
iノードはuidですが、特定のfsに関連付けられているため、guidではありません。これは悪いことではありません。コピー、バックアップ、アーカイブ、&cは、ファイルが他のファイル内に複製されて保存されることを意味し、fs状態に結果を解くのに十分な情報を提供する必要があるためです。
チャールズスチュワート

1
パンチラインを逃しましたが、これに対応できるソフトウェアは何ですか?自分のインフラストラクチャを作成せずに気軽に使用できるものを期待していました。(しかし、必要に応じて自分で
拡張

22

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

http://www.tmsu.org/

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

はい。

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

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

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

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

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

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

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

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

GUIが関与している場合、CLIフォールバックが必要です

現在GUIはありません。


とても面白そうです。関連するタグを失うことなくファイルを移動する可能性を実装する方法はありますか?
学生

@student:現在、移動および変更されたファイルを処理する「修復」コマンドがあります。(ただし、ファイルの移動と変更の両方を行う場合、これは検出されません。)
ポールルアン

1つは、おそらく、の変種を書くことができmvcpそしてrm(例えばそれらを呼び出すだけでなく、あなたのタグを処理しているtmvtcptrm...)1は、ファイルを移動するコマンドラインを使用している場合、その後1は、少なくともタグを失うことはない
学生

@student TMSUには、データベースを最新の状態に保ちながらファイルシステム操作を実行するスクリプトが含まれています:tmsu-fs-mvtmsu-fs-rmおよびtmsu-fs-merge
ポールルアン

私の質問を失礼しますが...¿ 移動するときにファイルを手動で更新する必要がありますか?
erm3nda

6

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

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

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


1
ページから:「タグ情報はファイル名に保存されます」-タグ付けされたファイル名はどのように見えますか?ところで、そのページのリンクは非常に興味深いです:+1。
チャールズスチュワート

請求書[仕事のもの、hr、私が制作] .odt
laramichaels

@laramichaelsこれはかなり古いことは知っていますが、このアプローチには非常に興味がありました。もしドキュメントがないのでなければ(どこにもファイルの命名方法が説明されていない)私はそれを採用するでしょう。そのようなツールに関するニュースがある場合は、お知らせください。
TomCho

6

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


ファイルのiノードデータは、ext4 fsで定義的に正しい方法である必要がありますが、下位互換性はありません。右?
erm3nda

6

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

TagSpaces


1
タグスペースにはCLIフォールバックがないため、すべての要件を満たしていません。または、CLIがありますか?もしそうなら、私に知らせてください!
-TomCho

Debian 9 aptではアプリケーションのサポートはありません。何かありますか?- -あなたはこれらの命令により、アプリをインストールすることができますtagspaces.org/products
レオ・レオポルド・ヘルツ준 영

あなたの提案をLinuxデスクトップ検索ツールと比較してください。
レオレオポルトヘルツ준영

5

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


1
うんよく私はこれに代わるものを見つけることを期待していたが、それは...そう見ていない
ジュリアン

2

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

  1. システム全体ではありません。
  2. バックアップできます。
  3. Gnomeにバンドルされています。

2

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

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


beagleは非正規ファイルを処理できますか?
チャールズスチュワート

@チャールズスチュワート-非テキストファイルのことですか?
pcapademic

いいえ、デバイスファイル、シンボリックリンク、FIFO、&cを意味します
チャールズスチュワート

このリンクは、ドキュメントの整理に関するプロジェクトを指すものではありません。
確実に



1

したがって、Nepomukの統合はgnome、コマンドライン、またはLinuxの他の場所にはありません。

逆に、Trackerを使用すると、kdeの統合は見当たりません。CLIではわかりません。

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

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


0

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

https://github.com/alvatar/dfym

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


0

TMSU

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

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

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


1
あなたはそれを見逃した...それは最高の投票された答えです
フグ

-1

このようなファイルシステム以上の機能については、Subversionなどのバージョン管理システムをご覧になることをお勧めします。いくつかは他のものよりもあなたに適しているかもしれませんが、一般的に:

  • 多くはタグ付けをサポートしています(確実に転覆)。
  • 多くはクロスプラットフォームです。Windows、Mac、Linux、ほとんどすべてのUnix。
  • 多くの場合、GUIフロントエンドとコマンドラインクライアントの両方があります。
  • 多くの人はすでにお気に入りのプログラミング/スクリプト言語のバインディングを持っています。
  • 多くは簡単にバックアップされます。
  • 多くは、何らかの方法で非常に簡単に共有できるように設計されています。
  • 多くの場合、アクセスを制御できます。
  • 車輪を再発明する必要はありません。
    • すでに数百万人が使用している標準のコマンド/ツールを学び、使用します。
  • お気に入りのOSリポジトリ用に今日インストールできます。apt-get install、yum install
  • また、バージョン管理を「無料で」利用できます。

Subversionを使用したCLIの例: ~/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

これらのツールは、定期的に変更される大容量(ギガバイトサイズ)のバイナリファイルにはお勧めしませんが、それ以外の場合は既に十分に実証されており、非常に大きなサイズに拡張できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.