
整理されていないディレクトリ構造に 10 万個のファイルがある大規模な SAN を想像してください。
ファイルは、整理されたディレクトリ構造を持つ新しい SAN に移動されます。一部のファイルは、移動時に名前が変更されます。また、多くのファイルには参照があります。たとえば、Excel スプレッドシートは相互にリンクされており、移動後に壊れます。
壊れたリンクを修正するなど、アーカイブを参照する必要がある場合に備えて、From および To ファイル パスのマップを保持する必要があります。
市場に何かあるかどうか調べてみましたが、見つかりませんでした。そこで、ユーザーがファイルやレコードを SQL DB にドラッグ アンド ドロップできるアプリケーションの作成を始めました。
このアプローチについては 100% 確信がありません。これを行うより良い方法があるかどうか知っている人はいませんか? Windows には何かありますか?
古いディレクトリと新しいディレクトリをスキャンして、その方法でマップを作成することを考えていました。残念ながら、ファイル名が変更される可能性があり、移動されたファイルの作成日や変更日などが今日になるため、この方法はうまくいきません。
各ファイルに一意の識別子を持たせることを考えていましたが、異なるファイルタイプの一意の識別子をどこに保存するかという問題で、そのアイデアは実現しませんでした。
おそらく AutoHotKey スクリプトでしょうか?
答え1
私はクライアントの 1 社のために C# で自動デプロイメント システムを構築しました。この問題は規模を除けば似ています。
ADS で処理された内容:
- SVN からの自動チェックアウト。
- すべてのフォルダーを走査します。
- 各フォルダーはロールアウトに含めるか除外することができます。
- フォルダーが含まれる場合、すべてのファイルとサブフォルダーも含まれます。除外の場合も同様です。
- インクルードと同様に、各フォルダーを展開フォルダー内の新しい場所に再配置できます。
- すべてがドラッグ アンド ドロップでした (ありがたいことに、デプロイメント スクリプトはそれほど頻繁に変更する必要はありません)。
- 最も重要な部分は、変更されたファイルのみをコピーするためのバイナリ ファイルの比較でした。<-- これはあなたにとっても最も重要なことのようです。私は C# や perl コード ファイルなどのコード ファイルのみを扱っていたので、これは簡単なチェックでした。
- 左右にファイルを取る
- すべての空白を削除します。
- ファイルを 1 バイトずつ比較します。
あなたの場合、ファイルがかなり巨大でない限り、同じアプローチを使用できます。ファイルが大きい場合 (データ ファイルであると仮定)、単純なヘッダー/フッターの比較で十分です。
各ファイルに一意の識別子を持たせることを考えていましたが、異なるファイルタイプの一意の識別子をどこに保存するかという問題で、そのアイデアは実現しませんでした。
私も最初はこの方法から始めましたが、問題はそれほど深刻ではなかったので、やめることにしました。技術的には、各 FileInfo オブジェクトは GUID 型の特定のフィールドを持つ特殊なクラスにラップされていました。シリアル化されたクラスのこの配列を XML ファイルに保存していました。
<FIItem>
<ID>*some guid*</ID>
<FileInfoObj>*file info which contains full file path*</FileInfoObj>
</FIItem>