我如何递归解压缩嵌套的ZIP文件?

问题描述 投票:4回答:4

鉴于嵌套的ZIP文件内部存在一个秘密文件,即zip文件内部的zip文件内部的zip文件,等等...

zip文件名为1.zip2.zip3.zip等...

我们不知道zip文件的嵌套深度,但是可能是数千个。

最简单的方法是遍历所有对象直到最后一个读取机密文件?

我最初的方法是递归调用unzip,但是我的Bash技能有限。您有什么解决方案?

linux bash shell zip unzip
4个回答
1
投票

这是我的2美分。

#!/bin/bash

function extract(){
  unzip $1 -d ${1/.zip/} && eval $2 && cd ${1/.zip/}
  for zip in `find . -maxdepth 1 -iname *.zip`; do
    extract $zip 'rm $1'
  done
}

extract '1.zip'

0
投票

感谢赛勒斯!主向导Shawn J. Goff为此拥有了完美的脚本:

while [ "`find . -type f -name '*.zip' | wc -l`" -gt 0 ]; do find -type f -name "*.zip" -exec unzip -- '{}' \; -exec rm -- '{}' \;; done

0
投票

可能不是最干净的方法,但这应该可以解决问题:

#!/bin/sh
IDX=1 # ID of your first zip file
while [ 42 ]
do
    unzip $IDX.zip # Extract
    if [[ $? != 0 ]]
    then
        break # Quit if unzip failed (no more files)
    fi
    if [ $IDX -ne 1 ]
    then
        rm $IDX.zip # Remove zip to leave your directory clean
    fi
    (( IDX ++ )) # Next file
done

0
投票

签出此基于Java的实用程序nzip以获取嵌套的zip。

可以使用以下命令轻松地提取和压缩嵌套的zip:

java -jar nzip.jar -c list -s readme.zip 

java -jar nzip.jar -c extract -s "C:\project\readme.zip" -t readme 

java -jar nzip.jar -c compress -s readme -t "C:\project\readme.zip" 

PS. I am the author and will be happy to fix any bugs quickly.
© www.soinside.com 2019 - 2024. All rights reserved.