다수의 zip 파일에 대한 비밀번호 확인

다수의 zip 파일에 대한 비밀번호 확인

클라이언트를 위한 ETL 프로세스를 개발 중입니다. 또 다른 공급업체는 원시 데이터를 비밀번호로 보호된 약 100개의 ZIP 파일 세트로 제공했습니다.

이 파일 세트에 대해 주어진 비밀번호가 올바른지 확인하고 싶습니다.

현재 사용 중인 스크립트는 루프와 7zip을 사용합니다.

#!/bin/bash
set -x
for filename in ../TheData/*Data*of*.zip; do
        echo "Checking $filename"
        7z t -ple_super_secret_assword $filename
done

파일로 파이프된 출력은 다음과 같습니다.

Checking ../TheData/Project1999Data_1of7.zip
+ 7z t '-pseeeecret' ../TheData/Project1999Data_1of7.zip

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Xeon(R) CPU E5-2470 0 @ 2.30GHz (206D7),ASM)

Scanning the drive for archives:
1 file, 632866983 bytes (604 MiB)

Testing archive: ../TheData/Project1999Data_1of7.zip

ERRORS:
Headers Error

실행 중인 파이프라인이 없으면 진행률 표시기가 있습니다. 아카이브가 작동하는지 테스트하고 일부 전체 발췌 부분을 확인하는 것도 작동하는 것처럼 보이기 때문에 제목 오류가 가짜라고 생각합니다.

현재로서는 단순히 모든 데이터를 가져오고 대신 스토리지 할당을 위한 변경 요청 프로세스를 기다리는 옵션은 없습니다.

비밀번호가 일련의 zip 파일에 적용되는지 확인하는 더 빠른 방법이 있습니까?

이 반환 코드를 캡처하고 간단한 통과/실패를 에코하는 방법이 있습니까?7zip은 여러 반환 코드를 기록합니다.

검사를 병렬로 실행하도록 이 스크립트를 변경할 수 있습니까? 7z는 코어의 80%만 사용하는 것으로 보이며 이는 I/O 바인딩임을 나타냅니다.

t(test)나 l(list) 함수를 사용해도 7zip의 성능에는 변화가 없는 것 같습니다.

답변1

쉘 오류/종료 코드를 확인하십시오.

7zip을 실행하여 파일을 압축하고 비밀번호로 보호하면,

echo "now that is what I call bubba" > bubba
7z a -psecret foo bubba
rm bubba #remove for convenience

7zip을 실행하여 아카이브 내용을 추출/테스트하려고 하면 7zip에서 오류가 발생합니다.

7z t -pnotsecret foo.7z
...
Extracting bubba    Data error in encrypted file. Wrong password?
...
Sub items Errors: 1

그런 다음 쉘 오류 코드를 확인할 수 있습니다.

echo $?
2

올바른 비밀번호를 입력하면

7z t -psecret foo.7z
...
Extracting bubba
...
Everything is Ok

그런 다음 쉘 오류 코드를 확인합니다.

echo $?
0

따라서 쉘 오류/종료 코드를 사용하여 비밀번호가 올바른지 간단히 확인하거나 7z 및 grep -i의 출력을 스캔하여 "모든 것이 정상입니다"를 검색할 수 있습니다.

이것은 스크립트의 수정된 버전입니다.

#!/bin/bash
set -x
for filename in ../TheData/*Data*of*.zip; do
    #echo "Checking $filename"
    7z t -ple_super_secret_assword $filename
    if [ $? -eq 0 ]; then echo "ok: $filename"
    else echo "error: password failed $filename"
    fi
done

관련 정보