Bashループの解凍パスワードファイルスクリプト

Bashループの解凍パスワードファイルスクリプト

パスワードで保護されたファイルを解凍するためのスクリプトを作成しようとしています。パスワードは、解凍したときに取得したファイルの名前です。

例えば。

  • file1.zipには、パスワードがfile2のfile2.zipが含まれています。
  • file2.zipにはfile3.zipが含まれており、パスワードはfile3です。

file1.zip解凍して名前を読んでfile2.zipスクリプトに入力するにはどうすればよいですか?

以下はコマンドラインのスクリーンショットです。 これは私が意味するものを示すスクリーンショットです。

root@kaliVM:~/Desktop# unzip 49805.zip  
Archive:  49805.zip  
[49805.zip]  13811.zip password:  

新しいパスワードを知るためにこの出力を読み取るにはBashが必要です(この場合、パスワードは13811です)。

これが私がこれまでにしたことです。

#!/bin/bash

echo First zip name:
read firstfile


pw=$(zipinfo -1 $firstfile | cut -d. -f1)
nextfile=$(zipinfo -1 $firstfile)
unzip -P $pw $firstfile

rm $firstfile
nextfile=$firstfile

今、どのようにループにすることができますか?

ベストアンサー1

そのエントリがなく、zipinfo何らかの理由でインストールできない場合は、unzipwithオプションを使用して-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つずつファイル名のみを一覧表示します。このオプションは他のすべてのオプションを除外します。タイトル、トレーラー、zipファイルの説明は印刷されません。これはUnixシェルスクリプトで使用するように設計されています。

おすすめ記事