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


8

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

圧縮時に最大1GBのRAMを使用したい。私が持っているファイルはかなり大きく、1 GBのRAMを搭載し、他に何も実行していないP4マシンで7-zipのLZMA1 "ultra"で圧縮するには少なくとも1時間かかるため、私は非対称アルゴリズムに傾いています。私の目的には7-zipとFreeARCを使用できると思います。使用する必要があるコマンドを見つけようとしましたが、あまりうまくいきません。

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


1
LZMAが確定的であることをどの程度確信していますか?
イグナシオバスケスエイブラムス

2
運が少ない部分拡大します。
fideli

2
質問はどこですか?圧縮プログラムは、特に非可逆的でない限り、可逆的でなければなりません。
追って通知があるまで一時停止。

回答:


11

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

$ 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

1
また、gzipWindowsで使用できる他のポートがない場合は、Cygwinが提供します。
Arjan

3

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

ずっと前(別の千年紀)にも同じ問題がありました。圧縮ファイルを解凍して比較することなく同じ場所にあるかどうかを知りたいと考えました。

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


2
いいです、もちろん私達私達が仮定したことを読むべきだと知っていました ;-)
Arjan

また、圧縮率とは完全に独立しているので便利です。異なるプログラムによって作成された、または異なる設定を使用して作成された圧縮ファイルは、同じものとして認識される場合があります。
Arjan

1
この記事はほとんど同じ問題を解決しようとしています... medium.com/@mpreziuso/…– XCore 2017
1

2

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


1

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

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