假设我有以下文件想要写入
.tgz
文件:
myfiles
|___file1.txt
|___file2.txt
请注意,我只想将文件(而不是它们的封闭目录)写入存档文件。换句话说,当我提取
.tgz
文件时,我想在存档的根目录中看到 file1.txt
和 file2.txt
(不是父目录 myfiles
)。
当我尝试使用 python 的内置 tarfile
包来完成此操作时,我按顺序执行以下操作:
tarfile.open("myArchive.tgz", "w:gz")
初始化存档并创建 TarFile
对象TarFile.add("myfiles/file1.txt", "file1.txt")
将一个文件添加到 TarFile
对象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)
myFiles
tar = tarfile.open("myArchive.tgz", 'w:gz')
tar.add("myFiles/file1.txt", "file1.txt")
tar.add("myFiles/file2.txt", "file2.txt")
tar.close()
tar.add()
并再次运行。观察创建的存档文件的目录结构。我希望发生的是 file1.txt 和 file2.txt 将位于存档文件的根目录,而不是文件夹
myArchive
位于存档文件的根目录。
我解决了这个问题。解压缩存档时,我会双击我制作的
.tgz
文件。结果这样做使用了 MacOS 的 Archive Utility
程序来解压缩,这反过来又创建了我发现有问题的封闭文件夹。要正确解压缩它,请通过终端按照以下步骤,一切都会完美运行。抱歉扬起了灰尘!