クライアント用の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