使用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
相关产品推荐
相关产品推荐

