zipファイルの比較とディレクトリの抽出

zipファイルの比較とディレクトリの抽出

zipファイルとzipファイルから抽出されたディレクトリを比較する最も簡単な方法は何ですか? zipファイルが同じであれば削除したいです。

はい。Archive.zipディレクトリに同じファイルが含まれていることを確認する必要がありますtravel_photos/(つまり、そのディレクトリ内のすべてのファイルがArchive.zip正しく抽出されたかどうかtravel_photos/)。

限定。アーカイブの作成と抽出の実行方法を変更することはできません。このファイルは私に提供されており、後で確認する必要があります。つまり、内部のすべてのファイルのチェックサムを含むファイルを作成することはできませんArchive.zip

必要です。travel_photos/大きなディレクトリを処理する必要があり、他の大きなファイルを作成するのに十分なスペースがない可能性があるため、別のzipアーカイブを作成したくありません。このため、下記の2~5番は良くありませんが、どれがうまくいくかを調べるために努力しました。

私が今まで試したこと。

  1. 比較md5sum Archive.zipして(cd travel_photos; zip -rqq - *) | md5sum
  2. 比較(cd travel_photos; zip -rqq ../test.zip *); md5sum test.zipしてmd5sum Archive.zip
  3. 比較unzip -p test.zip | md5sumしてunzip -p Archive.zip | md5sum
  4. zcmp test.zip Archive.zip(また一緒にzdiff
  5. unzip -vql test.zip | sort -k8 | md5sumそしてunzip -vql Archive.zip | sort -k8 | md5sum

部分的な解決策。上記の最後の例を変更してフィールドのCmpr合計を削除しSize(2つのアーカイブのファイルがまったく同じであってもサイズは異なりますか?)、最初の2行から合計アーカイブサイズを削除すると、次のことがわかります。アーカイブも同じだ。

diff -W200 -y <(unzip -vql test.zip | sort -k8 | awk '{if(NR>2) print ($1"\t"$2"\t"$5"\t"$6"\t"$7"\t"$8)}' ) <(unzip -vql Archive.zip | sort -k8 | awk '{if(NR>2) print ($1"\t"$2"\t"$5"\t"$6"\t"$7"\t"$8)}' ) --suppress-common-lines

このソリューションの欠点は、作成してtest.zipディスクに保存する必要があることです。travel_photos/ディレクトリとzipファイルを比較する方法はありますかArchive.zip?次のようにzipコマンドの出力をパイプしようとしましたが、うまくいきませんでした。

diff -W200 -y <(unzip -vql Archive.zip | sort -k8 | awk '{if(NR>2) print ($1"\t"$2"\t"$5"\t"$6"\t"$7"\t"$8)}' ) < ((cd travel_photos; zip -rqq - *) > unzip -vql | sort -k8 | awk '{if(NR>2) print ($1"\t"$2"\t"$5"\t"$6"\t"$7"\t"$8)}' ) --suppress-common-lines

答え1

"folderdiff"(https://pypi.org/project/folderdiff/)はファイルをディスクに保存せず、フォルダの内容をZIPアーカイブの内容と比較します。

2つのZIPアーカイブコンテンツを比較することもできます。

「FolderDiff」は、Webアプリケーション(WordPressなど)を信頼できるソースと比較し、バックドアを含む可能性のある変更または追加されたファイルを見つけるために作成されました。

各ファイルに対してSHA256ハッシュが計算され、信頼できるソースと比較されます。 "folderdiff"には2つのパラメータが必要です。 1つ目は信頼できるソース、2つ目は信頼できるソースと比較する必要があるフォルダです。

次の例は、既存のWordPressインストールでバックドアを見つける方法を示しています。

$ folderdiff wordpress-6.0.3-de_AT.zip /var/www/ --prefix wordpress/
===================== Added ======================
+ webshell.php
==================== Modified ====================
* index.php

公開:私はフォルダdiffの著者です

関連情報