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