2017-07-11 19 views
0

この記事の説明にあるように、https://medium.com/@mpreziuso/is-gzip-deterministic-26c81bfd0a49は、全く同じファイルセットの圧縮である2つの.tar.gzファイルのmd5が異なる場合があります。これは、たとえば、圧縮ファイルのヘッダーにタイムスタンプが含まれているためです。pythonで同じ内容の同じmd5ハッシュを保持するアーカイブを作成する方法は?

記事では3つのソリューションが提案されている、と私はidealy最初の1ウィッヒを使用したいです:

私たちは、gzipのタイムスタンプとファイルを省略するようになりますgzip形式で-nフラグを使用することができますファイルヘッダからの名前。

そして、このソリューションがうまく機能:

tar -c ./bin |gzip -n >one.tar.gz 
tar -c ./bin |gzip -n >two.tar.gz 
md5sum one.tgz two.tgz 

それでも私はPythonでそれを行うには良い方法がどうなるかの見当がつかない。 tarfile(https://docs.python.org/2/library/tarfile.html)でそれを行う方法はありますか?

+1

あなたはあなただけの外部プロセスとして書いたコマンドを起動できない理由をいくつかの理由がありますか? 'os.system(" tar -c ./bin | gzip -n> one.tar.gz ")' –

+2

'gzip.GzipFile()'に明示的な 'mtime'引数を使用すると何が問題になりますか? –

答えて

1

回避策として、代わりにbzip2圧縮を使用できます。この問題を持っていないようです:

import tarfile 

tar1 = tarfile.open("one.tar.bz2", "w:bz2") 
tar1.add("bin") 
tar1.close() 

tar2 = tarfile.open("two.tar.bz2", "w:bz2") 
tar2.add("bin") 
tar2.close() 

実行md5が与える:

[email protected]:~/test$ md5sum one.tar.bz2 two.tar.bz2 
e9ec2fd4fbdfae465d43b2f5ecaecd2f one.tar.bz2 
e9ec2fd4fbdfae465d43b2f5ecaecd2f two.tar.bz2 
関連する問題