2016-02-23 6 views
6

2つのzipで2つのファイルを展開せずにdiff操作を実行する方法はありますか?そうでない場合は、抽出せずに比較する他の回避策ですか?diffファイルをzip内に展開せずに

ありがとうございました。

+0

2つのファイルが異なるかどうかを知りたいのか、それともビジュアル差分を取得するだけですか? – gollum

答えて

6

unzip -lは、zipファイルの内容をリストします。ここに述べたように、あなたはその後、通常の方法でdiffにそれを渡すことができます。https://askubuntu.com/questions/229447/how-do-i-diff-the-output-of-two-commands

したがって、たとえば次の2つのzipファイルがあった場合:

foo.zip 
bar.zip 

をあなたはサイドバイサイドの差分を行うにはdiff -y <(unzip -l foo.zip) <(unzip -l bar.zip)を実行することができ2つのファイルの内容の

希望に役立ちます!

+2

'--suppress-common-lines'フラグを追加すると、異なる行だけを表示することができます。 ' diff -y <(unzip -l foo.zip)<(unzip -l bar。私は '関数zipdiff(){差分-y <(解凍-l $ 1)<(解凍-l $ 2)--suppress共通ラインになってしまったジッパー)--suppress-コモンlines' – KostasX

+2

。 }}、それは私がしようとしていたことに対して完璧に機能しました。 –

4

diffのように、のように)2つのファイルを抽出したい場合は、それらを抽出する必要があります。 unzip -p抽出ファイルP IPE(標準出力)へ:

# define a little bash function 
function zipdiff() { diff -u <(unzip -p $1 $2) <(unzip -p $3 $4); } 

# test it: create a.zip and b.zip, each with a different file.txt 
echo hello >file.txt; zip a.zip file.txt 
echo world >file.txt; zip b.zip file.txt 

zipdiff a.zip file.txt b.zip file.txt 
--- /dev/fd/63 2016-02-23 18:18:09.000000000 +0100 
+++ /dev/fd/62 2016-02-23 18:18:09.000000000 +0100 
@@ -1 +1 @@ 
-hello 
+world 

注:あなたはこのような何か(何のエラーチェックや)を行うことができる2つのジッパーには、2つのファイルの差分を見るために

あなただけのファイルは、あなたが使用してチェックサムを調べることができます異なっているかどうかを知りたい場合は

unzip -v -l zipfile [file_to_inspect] 

注:-vは、あなたの上記の例では冗長と-lリストの内容)

unzip -v -l a.zip 
Archive: a.zip 
Length Method Size Cmpr Date Time CRC-32 Name 
-------- ------ ------- ---- ---------- ----- -------- ---- 
     6 Stored  6 0% 2016-02-23 18:23 363a3020 file.txt 
--------   ------- ---       ------- 
     6    6 0%       1 file 

unzip -v -l b.zip 
Archive: b.zip 
Length Method Size Cmpr Date Time CRC-32 Name 
-------- ------ ------- ---- ---------- ----- -------- ---- 
     6 Stored  6 0% 2016-02-23 18:23 dd3861a8 file.txt 
--------   ------- ---       ------- 
     6    6 0%       1 file 

を意味し、チェックサム(CRC-32)が異なることが分かります。

また、このプロジェクトに興味があるかもしれません: https://github.com/nhnb/zipdiff

0

あなただけのファイルが等しい場合は、アーカイブのローカルヘッダフィールド/中央ディレクトリに格納されているCRC32チェックサムを、比較することができますチェックする必要がある場合。

5

これまでの回答を組み合わせると、次のbash関数はzipファイルのファイルリストを比較します。リストには冗長出力(unzip -v)が含まれているため、チェックサムを比較することができます。出力はファイル名(sort -k8)でソートされ、並列比較が可能になり、diff出力が展開され(W200)、ファイル名が左右に見えるようになります。

function zipdiff() { diff -W200 -y <(unzip -vql $1 | sort -k8) <(unzip -vql $2 | sort -k8); } 

これは、任意のコンソールから使用するためにあなたの~/.bashrcファイルに追加することができます。 zipdiff a.zip b.zipと併用できます。出力を小さいものに配管するか、ファイルにリダイレクトすることは、大規模なzipファイルに役立ちます。

関連する問題