web-dev-qa-db-ja.com

作成日のみが異なるソースファイルに対して、100%同一の圧縮ファイルを取得するにはどうすればよいですか?

ファイルをロスレスで圧縮できるようにしたい、そして元のファイルが別のユーザーのファイルと同一である場合、元のファイルの日付が異なっていても、両方の圧縮ファイルを一致させたい

圧縮中に最大1GBのRAMを使用したい。私が持っているファイルはかなり大きく、LZMA1で圧縮するのに少なくとも1時間かかるため、非対称アルゴリズムに傾いています。 1GBのP4マシン上の7-Zipの「超」RAMで、他には何も実行されていません。7-ZipとFreeARCは私の目的に使用できると思います。コマンドを見つけようとしました使うべきですが、運が悪いです。

編集:作成日が異なっていても、100%同一のファイルを作成する必要があります。これは、Freearcの--nodatesを介して、????を使用して可能になるはずです。 7-Zipで。 7-Zipと同等のコマンドと、複数のコンピューター間で圧縮を標準化する方法を探しています。

8
Andy

同一のファイルをいくつか作成します。

$ 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
11
Gareth Davidson

あなたの質問に対する直接の答えではありませんが、とにかく助けになるかもしれません。

ずっと前(別の千年紀)、私は同じ問題を抱えていました。圧縮ファイルを解凍して比較せずに、同じ場所にあるかどうかを知りたいと思いました。

私たちの解決策は、圧縮する前にファイルの md5sum を取得し、ファイルを圧縮してmd5sum.Zip(。Zipまたは.tarに名前を変更することでした。 .gzまたは.rarまたは.whatever)。このようにして、2つのファイルが同じ名前(サフィックスなし)の場合、それらは同一であることがわかりました。

3
Nifle

pristine-tar は、ハッキングされたバージョンのgzipがあり、常に同じ結果を生成します(bzip2の場合は別の結果を生成します)。アルゴリズムのバリアントとタイムスタンプを選択すれば、準備は完了です。

2
Tobu

7-Zipのソースをハックします。ファイルの日付を読み取る場所で、日付を01.01.1997、またはその他の値に変更するコードを挿入するだけです。すべてのファイルで修正されています。別の名前でコンパイルして使用してください。

1
kagali-san