ファイルをロスレスで圧縮できるようにしたい、そして元のファイルが別のユーザーのファイルと同一である場合、元のファイルの日付が異なっていても、両方の圧縮ファイルを一致させたい。
圧縮中に最大1GBのRAMを使用したい。私が持っているファイルはかなり大きく、LZMA1で圧縮するのに少なくとも1時間かかるため、非対称アルゴリズムに傾いています。 1GBのP4マシン上の7-Zipの「超」RAMで、他には何も実行されていません。7-ZipとFreeARCは私の目的に使用できると思います。コマンドを見つけようとしました使うべきですが、運が悪いです。
編集:作成日が異なっていても、100%同一のファイルを作成する必要があります。これは、Freearcの--nodatesを介して、????を使用して可能になるはずです。 7-Zipで。 7-Zipと同等のコマンドと、複数のコンピューター間で圧縮を標準化する方法を探しています。
同一のファイルをいくつか作成します。
$ echo hello > file1.test
$ echo hello > file2.test
それらをgzipで圧縮します。
$ gzip file1.test
$ gzip file2.test
唯一の違いとしてタイムスタンプフィールドを確認してください。
$ hexdump file1.test.gz
0000000 8b1f 0808 TIME STMP 0300 6966 656c 2e31
0000010 6574 7473 cb00 cd48 c9c9 02e7 2000 3a30
0000020 0636 0000 0000
タイムスタンプの詳細については、 [〜#〜] rfc [〜#〜] を参照してください。
これで、バイト8の後に開始するMD5を取得して、ファイル内のこれら4バイトをゼロにしてタイムスタンプを失うか、これらのgzipからCRC16を抽出できます(これを抽出する方法については、RFCも参照してください)。
または、タイムスタンプなしで保存できます。
$ echo test > file1.test
$ echo test > file2.test
$ gzip -n file1.test
$ gzip -n file2.test
$ md5sum file1.test.gz
cfe4ddf1c4c3891b4ff4a1269b42db82 file1.test.gz
$ md5sum file2.test.gz
cfe4ddf1c4c3891b4ff4a1269b42db82 file2.test.gz
あなたの質問に対する直接の答えではありませんが、とにかく助けになるかもしれません。
ずっと前(別の千年紀)、私は同じ問題を抱えていました。圧縮ファイルを解凍して比較せずに、同じ場所にあるかどうかを知りたいと思いました。
私たちの解決策は、圧縮する前にファイルの md5sum を取得し、ファイルを圧縮してmd5sum.Zip
(。Zipまたは.tarに名前を変更することでした。 .gzまたは.rarまたは.whatever)。このようにして、2つのファイルが同じ名前(サフィックスなし)の場合、それらは同一であることがわかりました。
pristine-tar は、ハッキングされたバージョンのgzipがあり、常に同じ結果を生成します(bzip2の場合は別の結果を生成します)。アルゴリズムのバリアントとタイムスタンプを選択すれば、準備は完了です。
7-Zipのソースをハックします。ファイルの日付を読み取る場所で、日付を01.01.1997、またはその他の値に変更するコードを挿入するだけです。すべてのファイルで修正されています。別の名前でコンパイルして使用してください。