将多个文件添加到 TAR 存档的根目录,而不创建封闭目录

问题描述 投票:0回答:1

假设我有以下文件想要写入

.tgz
文件:

myfiles
|___file1.txt
|___file2.txt

请注意,我只想将文件(而不是它们的封闭目录)写入存档文件。换句话说,当我提取

.tgz
文件时,我想在存档的根目录中看到
file1.txt
file2.txt
(不是父目录
myfiles
)。 当我尝试使用 python 的内置
tarfile
包来完成此操作时,我按顺序执行以下操作:

  1. 使用
    tarfile.open("myArchive.tgz", "w:gz")
    初始化存档并创建
    TarFile
    对象
  2. 使用
    TarFile.add("myfiles/file1.txt", "file1.txt")
    将一个文件添加到
    TarFile
    对象
  3. 使用
    TarFile.close()
    关闭存档文件。

如果我按照所写的方式运行上述步骤,一切都会正常工作,并且我能够创建一个存档,其根目录下只有一个文件,没有父文件夹。但是,如果我运行上述步骤,但多次重复步骤 2(例如,使用 for 循环将多个文件添加到存档中),则

tarfile
会创建一个存档文件,其根目录下有一个名为
myArchive
的目录,然后包含
file1.txt
file2.txt
。换句话说,解压后的存档文件如下所示:

myArchive
|___file1.txt
|___file2.txt

为什么要这样做?如何才能在存档文件的根目录中同时拥有

file1.txt
file2.txt

重现步骤:

环境信息: Python 版本: 3.10.13,操作系统: MacOS 14.1.1 (23B81),CPU 架构: M2 Pro (arm64)

  1. 在计算机上的某处创建如上所示的目录
    myFiles
  2. 运行以下代码,观察创建的归档文件的目录结构
tar = tarfile.open("myArchive.tgz", 'w:gz')
tar.add("myFiles/file1.txt", "file1.txt")
tar.add("myFiles/file2.txt", "file2.txt")
tar.close()
  1. 注释掉其中一行
    tar.add()
    并再次运行。观察创建的存档文件的目录结构。

我希望发生的是 file1.txt 和 file2.txt 将位于存档文件的根目录,而不是文件夹

myArchive
位于存档文件的根目录。

python gzip tar tarfile
1个回答
0
投票

我解决了这个问题。解压缩存档时,我会双击我制作的

.tgz
文件。结果这样做使用了 MacOS 的
Archive Utility
程序来解压缩,这反过来又创建了我发现有问题的封闭文件夹。要正确解压缩它,请通过终端按照以下步骤,一切都会完美运行。抱歉扬起了灰尘!

© www.soinside.com 2019 - 2024. All rights reserved.