
비밀번호로 보호된 파일의 압축을 풀기 위한 스크립트를 만들려고 합니다. 비밀번호는 압축을 풀 때 얻은 파일의 이름입니다.
예를 들어.
- 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
어떤 이유로든 설치할 수 없는 경우 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: 한 줄에 하나씩 파일 이름만 나열합니다. 이 옵션은 다른 모든 옵션을 제외합니다. 제목, 예고편 및 zip 파일 설명은 인쇄되지 않습니다. 이는 Unix 쉘 스크립트와 함께 사용하도록 고안되었습니다.
답변2
묻다zipinfo
zip 파일에 나열된 파일 이름을 가져와 비밀번호로 캡처합니다. 파일의 압축을 풀려면 다음 비밀번호를 사용하세요.
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"
}