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(測試)或 l(列表)函式,7zip 的性能似乎沒有變化。
檢查外殼錯誤/退出程式碼。
當我執行 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
然後我可以檢查shell錯誤程式碼,
echo $? 2
當我提供正確的密碼時,
7z t -psecret foo.7z ... Extracting bubba ... Everything is Ok
然後我檢查shell錯誤程式碼,
echo $? 0
因此,您可以使用 shell 錯誤/退出程式碼來簡單地檢查密碼是否正確,或者您可以掃描 7z 的輸出並 grep -i “everything is ok”。
這是您的腳本的修訂版,
#!/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