You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何递归就地解压目录结构中的所有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)

使用步骤

  1. 把上面的代码复制保存成extract_zips.py文件
  2. 打开终端(Linux)或命令提示符/PowerShell(Windows),切换到你要处理的目标目录
  3. 运行命令:
    • Linux: python3 extract_zips.py
    • Windows: python extract_zips.py 或者 py extract_zips.py(根据你的Python别名调整)

脚本特性

  • 自动递归所有子目录,不用手动逐个处理文件夹
  • 保留原.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

火山引擎 最新活动