Linux

Bash循環解壓縮密碼文件腳本

  • August 8, 2018

我正在嘗試製作一個腳本來解壓縮受密碼保護的文件,密碼是解壓縮時將獲得的文件的名稱

例如。

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由於任何原因無法安裝,您可以使用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 :僅列出文件名,每行一個。此選項排除所有其他選項;標題、預告片和 zipfile 註釋從不列印。它旨在用於 Unix shell 腳本。

引用自:https://unix.stackexchange.com/questions/461275