Pokud nemáte a nemůžete nainstalovat zipinfo
z jakéhokoli důvodu jej můžete napodobit pomocí unzip
s -Z
volba. Pro výpis obsahu zip použijte unzip -Z1
:
pw="$(unzip -Z1 file1.zip | cut -f1 -d'.')"
unzip -P "$pw" file1.zip
Dejte to do smyčky:
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
nebo rekurzivní funkce:
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 režim zipinfo(1). Pokud je první volba na příkazovém řádku -Z, zbývající volby se považují za volby zipinfo(1). Popis těchto možností naleznete na příslušné manuálové stránce.
-1 :vypíše pouze názvy souborů, jeden na řádek. Tato možnost vylučuje všechny ostatní; záhlaví, upoutávky a komentáře k zipfile se nikdy netisknou. Je určen pro použití v unixových shell skriptech.
Zeptejte se zipinfo
pro název souboru uvedený v souboru zip a poté jej zachyťte pro heslo. Použijte toto heslo k rozbalení souboru:
pw=$(zipinfo -1 file1.zip | cut -d. -f1)
unzip -P "$pw" file1.zip
Všimněte si, že příznak zipinfo
je jedna není ell .
Když si půjčíme od Gillesovy odpovědi na podobnou otázku, zde je bashová smyčka, která rozbalí vnořený soubor zip chráněný heslem, dokud nebudou žádné další soubory zip:
shopt -s nullglob
while set -- *.zip; [ $# -eq 1 ]
do
unzippw "$1" && rm -- "$1"
done
Kde jsem definoval funkci unzippw
jako obal pro zipinfo
a unzip
výše uvedené příkazy:
unzippw ()
{
local pw=$(zipinfo -1 "$1" | cut -d. -f1)
unzip -P "$pw" "$1"
}