Linux
Bash循環解壓縮密碼文件腳本
我正在嘗試製作一個腳本來解壓縮受密碼保護的文件,密碼是解壓縮時將獲得的文件的名稱
例如。
file1.zip contains file2.zip and it's password is file2. file2.zip contains file3.zip and it's password is file3
如何解壓縮
file1.zip
並讀取名稱file2.zip
以便將其輸入到腳本中?這是我的意思的螢幕截圖,我只需要 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
現在我怎樣才能讓它做循環?
如果您沒有並且
zipinfo
由於任何原因無法安裝,您可以使用unzip
with-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 :僅列出文件名,每行一個。此選項排除所有其他選項;標題、預告片和 zipfile 註釋從不列印。它旨在用於 Unix shell 腳本。