Jika Anda tidak memiliki dan tidak dapat menginstal zipinfo untuk alasan apa pun, Anda dapat menirunya dengan menggunakan unzip dengan -Z pilihan. Untuk membuat daftar isi zip gunakan unzip -Z1 :
pw="$(unzip -Z1 file1.zip | cut -f1 -d'.')"
unzip -P "$pw" file1.zip
Masukkan ke dalam satu lingkaran:
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
atau fungsi rekursif:
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) mode. Jika opsi pertama pada baris perintah adalah -Z, opsi yang tersisa dianggap sebagai opsi zipinfo(1). Lihat halaman manual yang sesuai untuk deskripsi opsi ini.
-1 :daftar nama file saja, satu per baris. Opsi ini mengecualikan yang lainnya; header, trailer, dan komentar zipfile tidak pernah dicetak. Ini dimaksudkan untuk digunakan dalam skrip shell Unix.
Tanyakan zipinfo untuk nama file yang tercantum dalam file zip, lalu ambil untuk kata sandi. Gunakan kata sandi itu untuk mengekstrak file:
pw=$(zipinfo -1 file1.zip | cut -d. -f1)
unzip -P "$pw" file1.zip
Perhatikan bahwa tandai ke zipinfo adalah satu bukan ell .
Meminjam secara bebas dari jawaban Gilles untuk pertanyaan serupa, inilah bash loop yang akan mengekstrak file zip bersarang yang dilindungi kata sandi hingga tidak ada lagi file zip:
shopt -s nullglob
while set -- *.zip; [ $# -eq 1 ]
do
unzippw "$1" && rm -- "$1"
done
Di mana saya telah mendefinisikan fungsi unzippw sebagai pembungkus untuk zipinfo dan unzip perintah di atas:
unzippw ()
{
local pw=$(zipinfo -1 "$1" | cut -d. -f1)
unzip -P "$pw" "$1"
}