zipinfo
がインストールされておらず、インストールできない場合 何らかの理由で unzip
を使用して模倣できます -Z
で オプション。 zip の内容を一覧表示するには、unzip -Z1
を使用します :
pw="$(unzip -Z1 file1.zip | cut -f1 -d'.')"
unzip -P "$pw" file1.zip
ループに入れます:
zipfile="file1.zip"
while unzip -Z1 "$zipfile" | head -n1 | grep "\.zip$"; do
next_zipfile="$(unzip -Z1 "$zipfile" | head -n1)"
unzip -P "${next_zipfile%.*}" "$zipfile"
zipfile="$next_zipfile"
done
または再帰関数:
unzip_all() {
zipfile="$1"
next_zipfile="$(unzip -Z1 "$zipfile" | head -n1)"
if echo "$next_zipfile" | grep "\.zip$"; then
unzip -P "${next_zipfile%%.*}" "$zipfile"
unzip_all "$next_zipfile"
fi
}
unzip_all "file1.zip"
<ブロック引用> -Z zipinfo(1) モード。コマンド行の最初のオプションが -Z の場合、残りのオプションは zipinfo(1) オプションと見なされます。これらのオプションの説明については、適切なマニュアル ページを参照してください。
-1 :ファイル名のみを 1 行に 1 つずつリストします。このオプションは、他のすべてを除外します。ヘッダー、トレーラー、および zipfile コメントは印刷されません。これは、Unix シェル スクリプトで使用するためのものです。
zipinfo
に尋ねる zip ファイルにリストされているファイル名を取得し、それを取得してパスワードを取得します。そのパスワードを使用してファイルを解凍します:
pw=$(zipinfo -1 file1.zip | cut -d. -f1)
unzip -P "$pw" file1.zip
zipinfo
へのフラグに注意してください。 は 1 です エルではない .
同様の質問に対するGillesの回答から自由に借用して、zipファイルがなくなるまで、パスワードで保護されたネストされたzipファイルを抽出するbashループを次に示します。
shopt -s nullglob
while set -- *.zip; [ $# -eq 1 ]
do
unzippw "$1" && rm -- "$1"
done
関数 unzippw
を定義した場所 zipinfo
のラッパーとして そして unzip
上記のコマンド:
unzippw ()
{
local pw=$(zipinfo -1 "$1" | cut -d. -f1)
unzip -P "$pw" "$1"
}