ローカルデータベースのファイルにインデックスを付けたいのですが、個々のファイルをどのように識別できるのかわかりません。たとえば、ファイルパスをデータベースに保存すると、ファイルが移動または削除された場合、エントリは無効になります。何が起こってもファイルを一意に識別する方法があると思いますが、Googleでは成功していません。
これは特に*nix/ Linuxとext4に当てはまりますので、windowsやntfsなどに固有のものは何もしないでください。
ローカルデータベースのファイルにインデックスを付けたいのですが、個々のファイルをどのように識別できるのかわかりません。たとえば、ファイルパスをデータベースに保存すると、ファイルが移動または削除された場合、エントリは無効になります。何が起こってもファイルを一意に識別する方法があると思いますが、Googleでは成功していません。
これは特に*nix/ Linuxとext4に当てはまりますので、windowsやntfsなどに固有のものは何もしないでください。
上記の優れた提案に加えて、ファイルの inode 番号プロパティを使用することを検討してくださいls -i
。
私のボックスの1つでindex.phpを使用する:
ls -i
収量
196237 index.php
次に、を使用してファイルの名前を変更しますmv index.php index1.php
。その後、同じls -i
結果が得られます。
196237 index1.php
(inode 番号は同じであることに注意してください)
MD5
、、などのハッシュスキームを使用してみてください。そうしないとSHA-1
、SHA-2
ファイルをコンテンツごとに一致させることができます。
基本的に、最初にインデックスを作成するときに、追加するすべてのファイルをハッシュします。この文字列は、2つのファイルが異なるか同じかを判断するのに非常に役立ちます。次に、ファイルの1つがすでにインデックスに含まれているかどうかを確認する必要がある場合は、それをハッシュしてから、生成されたハッシュを既知のハッシュのテーブルと比較します。
編集:コメントで述べたように、変更をより正確に追跡できるように、両方のデータを組み込むことをお勧めします
同じコンテンツのファイルを同じと見なさず、移動/名前変更されたファイルを同じものとして追跡したい場合は、その inode 番号を使用します。それ以外の場合は、コンテンツをハッシュする必要があります。
inode の唯一の利点は、削除後に再割り当てできることです (プラットフォームによって異なります)。ファイル作成のタイムスタンプとデバイス ID を 100% 確実に記録する必要があります。ウィンドウとそのユーザーファイル属性を使用すると簡単です。