GNU/Linux >> Linux の 問題 >  >> Linux

Bash ループでパスワード付きファイルを解凍するスクリプト

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"
}

Linux
  1. Bashスクリプトがエイリアスを認識しないのはなぜですか?

  2. フォルダから最も古いファイルを削除するためのBashスクリプト?

  3. Bashスクリプト:ファイルがテキストファイルかどうかを確認しますか?

  1. ターミナルでループバッシュスクリプトを停止する方法は?

  2. Sudoを介してSsh上でスクリプトファイルを実行しますか?

  3. シェルスクリプトBashでサブストリングをチェックする方法は?

  1. Unzipは、ZipファイルがZip爆弾であると考えていますか?

  2. VimでBashスクリプトを強調表示するには?

  3. bash スクリプトで md5 の合計を比較する