You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python zipfile解压后文件权限丢失,如何保留原始文件权限?

原因说明

Python 内置的 zipfile 模块默认不会自动还原 ZIP 包中存储的 Unix 系统文件权限,权限信息实际存储在每个 ZIP 条目的 external_attr 属性高位,需要手动提取并应用到解压后的文件上。

修复后的代码

import os
from zipfile import ZipFile

download_file = "hisat2-2.2.0-Linux_x86_64.zip"
# 替换为你实际的解压目标路径
script_dir = "/your/target/directory/path"

with ZipFile(download_file, 'r') as zip_ref:
    zip_ref.extractall(script_dir)
    # 遍历所有压缩条目恢复原始权限
    for item in zip_ref.infolist():
        # 提取高16位存储的Unix权限值
        permission = item.external_attr >> 16
        if permission:
            full_path = os.path.join(script_dir, item.filename)
            os.chmod(full_path, permission)

补充说明

  • 该方法会完全保留压缩包内记录的原始权限,包括可执行文件的执行位、目录权限等,和系统右键解压的效果完全一致。
  • 如果需要兼容Windows系统,可以在执行os.chmod前增加系统判断,Windows不需要也不支持该类Unix权限设置。

内容的提问来源于stack exchange,提问作者justinian482

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:06:04