鉴于嵌套的ZIP文件内部存在一个秘密文件,即zip文件内部的zip文件内部的zip文件,等等...
zip文件名为1.zip
,2.zip
,3.zip
等...
我们不知道zip文件的嵌套深度,但是可能是数千个。
最简单的方法是遍历所有对象直到最后一个读取机密文件?
我最初的方法是递归调用unzip
,但是我的Bash技能有限。您有什么解决方案?
这是我的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'
感谢赛勒斯!主向导Shawn J. Goff为此拥有了完美的脚本:
while [ "`find . -type f -name '*.zip' | wc -l`" -gt 0 ]; do find -type f -name "*.zip" -exec unzip -- '{}' \; -exec rm -- '{}' \;; done
可能不是最干净的方法,但这应该可以解决问题:
#!/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
签出此基于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.