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(두 아카이브의 파일이 정확히 동일하더라도 크기가 서로 다른가요?) 처음 두 줄에서 총 아카이브 크기를 제거하면 다음을 확인할 수 있습니다. 아카이브도 마찬가지다.

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"는 웹 애플리케이션(예: WordPress)을 신뢰할 수 있는 소스와 비교하고 백도어를 포함할 수 있는 수정되거나 추가된 파일을 찾기 위해 만들어졌습니다.

각 파일에 대해 SHA256 해시가 계산되어 신뢰할 수 있는 소스와 비교됩니다. "folderdiff"에는 2개의 매개변수가 필요합니다. 첫 번째는 신뢰할 수 있는 소스이고 두 번째는 신뢰할 수 있는 소스와 비교되어야 하는 폴더입니다.

다음 예에서는 기존 WordPress 설치에서 백도어를 찾는 방법을 보여줍니다.

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

공개: 저는 폴더diff의 저자입니다

관련 정보