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

Linux下Python的shutil.make_archive生成tar/gztar出现点目录是bug吗?

问题原因与解决方案

核心结论

这不是shutil.make_archive的bug,属于参数使用方式有误,tar与zip格式的底层路径处理逻辑差异导致了两种格式表现不一致。

问题根因

你当前的写法将root_dir直接指定为directoryX目录,shutil.make_archive的默认base_dir参数值为./:

  • zip格式打包时会自动过滤无意义的./路径前缀,所以内容会直接放在归档根目录
  • tar系列格式(包括tar、tar.gz)会严格保留写入的路径,./会被作为实际目录名写入归档,就出现了你遇到的所有内容都存在.文件夹的问题。手动指定base_dir=os.currdir本质还是传了./,所以问题不会解决。

正确写法

方案1:保留外层directoryX目录的写法

如果接受归档内有一层directoryX目录,直接调整参数即可:

import shutil
import os

shutil.make_archive(
    'NameOfArchive',
    format='gztar',
    root_dir=os.getcwd(),
    base_dir='directoryX'
)

方案2:内容直接存归档根目录的写法

如果不需要外层directoryX目录,希望所有内容直接放在归档根目录,使用更灵活的tarfile模块实现即可:

import tarfile
import os

with tarfile.open('NameOfArchive.tar.gz', 'w:gz') as tar:
    dir_path = os.path.join(os.getcwd(), 'directoryX')
    for item in os.listdir(dir_path):
        item_path = os.path.join(dir_path, item)
        # arcname参数指定文件在归档内的路径,去掉前缀即可
        tar.add(item_path, arcname=item)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:05