如何递归就地解压目录结构中的所有ZIP文件(支持Linux与Windows)
跨平台递归就地解压所有.zip文件的解决方案
刚好遇到过类似需求,给你两个实用方案:一个是全平台通用的Python脚本(首推,一次搞定Linux和Windows),另一个是分平台的命令行方法,你可以根据场景选择。
推荐方案:Python脚本(跨平台无差异)
这个脚本会自动递归遍历目标目录下所有子文件夹,把每个.zip文件就地解压到同级目录,同时保留原压缩文件。而且不需要额外安装解压工具,只要系统有Python3就行(现在大部分Linux发行版和Windows 10/11都默认自带)。
脚本代码
import os import zipfile def extract_all_zips(root_dir): # 递归遍历整个目录树 for current_dir, _, file_list in os.walk(root_dir): for file_name in file_list: # 只处理.zip后缀的文件(不区分大小写) if file_name.lower().endswith(".zip"): zip_full_path = os.path.join(current_dir, file_name) print(f"正在处理: {zip_full_path}") try: # 打开zip文件并解压到当前目录 with zipfile.ZipFile(zip_full_path, "r") as zip_handle: zip_handle.extractall(current_dir) except Exception as error: print(f"⚠️ 处理失败 {zip_full_path}: {str(error)}") if __name__ == "__main__": # 默认处理当前目录,你可以改成指定路径,比如: # Linux: "/home/your_name/target_folder" # Windows: r"C:\Users\your_name\target_folder"(r防止转义字符问题) target_directory = os.getcwd() extract_all_zips(target_directory)
使用步骤
- 把上面的代码复制保存成
extract_zips.py文件 - 打开终端(Linux)或命令提示符/PowerShell(Windows),切换到你要处理的目标目录
- 运行命令:
- Linux:
python3 extract_zips.py - Windows:
python extract_zips.py或者py extract_zips.py(根据你的Python别名调整)
- Linux:
脚本特性
- 自动递归所有子目录,不用手动逐个处理文件夹
- 保留原
.zip文件,不会自动删除 - 遇到损坏的压缩文件会打印错误提示,不会中断整个处理流程
- 跨平台逻辑完全一致,Linux和Windows下表现无差异
分平台命令行方法(适合不想写脚本的场景)
Linux 命令行
用find+unzip组合,一行命令搞定:
find . -name "*.zip" -type f -exec unzip -n {} -d "$(dirname {})" \;
-n参数:不覆盖已存在的文件(如果需要覆盖就去掉-n)-d "$(dirname {})":指定解压到当前zip文件所在的目录
Windows PowerShell
用PowerShell内置命令完成递归解压:
Get-ChildItem -Path . -Filter *.zip -Recurse | ForEach-Object { Expand-Archive -Path $_.FullName -DestinationPath $_.Directory -Force }
-Force参数:覆盖已存在的文件(不想覆盖就去掉这个参数)-Recurse:递归遍历所有子目录
内容的提问来源于stack exchange,提问作者sedsed




