如何提取Linux环境下多层嵌套Zip文件中的最内层文件?
提取多层嵌套Zip归档的最内层文件(Linux环境)
针对你这种每层仅包含一个嵌套Zip的场景,直接用bash循环就能自动完成3300次提取操作,不用手动重复执行。
方案一:适配你的文件名序列
如果确定归档严格遵循3301.zip到1.zip的命名规律,用这个脚本最稳妥:
current="3301.zip" while [ -f "$current" ]; do # 静默提取当前Zip,避免输出刷屏 unzip -q "$current" # 获取下一层嵌套的Zip文件名(每个归档仅包含该文件) next=$(unzip -l "$current" | awk 'NR>3 && $NF ~ /\.zip$/ {print $NF; exit}') # 删除已提取完成的旧Zip(不需要保留就注释掉该行) rm "$current" current="$next" # 处理到1.zip时,提取后终止循环 if [ "$current" = "1.zip" ]; then unzip -q "$current" rm "$current" break fi done
方案二:通用嵌套Zip提取(不依赖文件名)
如果不确定文件名规律,仅需提取所有嵌套到最内层,用这个通用循环:
# 只要当前目录存在Zip文件,就持续提取 while ls *.zip 1>/dev/null 2>&1; do # 取目录中第一个Zip文件进行提取 zip_file=$(ls *.zip | head -n1) unzip -q "$zip_file" # 删除原Zip(不需要保留就注释掉该行) rm "$zip_file" done
注意事项
- 先确认系统安装了
unzip工具:Debian/Ubuntu系执行sudo apt install unzip,RHEL/CentOS/Fedora系执行sudo dnf install unzip - 若中途遇到损坏的Zip文件,脚本会停止运行,需手动修复或跳过该归档
- 保留原Zip文件的话,注释掉所有
rm命令即可,但3300个Zip会占用较多磁盘空间
内容的提问来源于stack exchange,提问作者Cipri Rengle
相关产品推荐
相关产品推荐

