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: 한 줄에 하나씩 파일 이름만 나열합니다. 이 옵션은 다른 모든 옵션을 제외합니다. 제목, 예고편 및 zip 파일 설명은 인쇄되지 않습니다. 이는 Unix 쉘 스크립트와 함께 사용하도록 고안되었습니다.

답변2

묻다zipinfozip 파일에 나열된 파일 이름을 가져와 비밀번호로 캡처합니다. 파일의 압축을 풀려면 다음 비밀번호를 사용하세요.

pw=$(zipinfo -1 file1.zip | cut -d. -f1)
unzip -P "$pw" file1.zip

플래그는 다음과 같습니다 zipinfo.하나하나도 아니야엘자.

넉넉하게 돈을 빌려비슷한 질문에 대한 Giles의 답변, 다음은 더 이상 zip 파일이 없을 때까지 비밀번호로 보호된 중첩 zip 파일을 추출하는 bash 루프입니다.

shopt -s nullglob
while set -- *.zip; [ $# -eq 1 ]
do 
  unzippw "$1" && rm -- "$1"
done

나는 함수를 unzippw위와 명령 주위의 zipinfo래퍼 unzip로 정의했습니다.

unzippw ()
{
    local pw=$(zipinfo -1 "$1" | cut -d. -f1)
    unzip -P "$pw" "$1"
}

관련 정보