Python tar.add 个文件但忽略父目录

Python tar.add files but omit parent directories

我正在尝试从存储在文本文件中的文件列表创建一个 tar 文件,我有创建 tar 的工作代码,但我希望 start 某个目录(app 和所有子目录)中的存档,并删除父目录。这是因为软件只能打开某个目录下的文件。

package.list个文件如下:

app\myFile app\myDir\myFile app\myDir\myFile2

如果我在 restore.add 中省略路径,由于我的程序 运行 从别处找不到文件。我如何告诉 tar 到特定目录中的 start,或添加文件,但保持它从文本文件中获得的目录结构,例如 starting 与app 并非所有父目录

我的 objective 是这样做 tar cf restore.tar -T package.list 但是 Python 在 Windows.

我已经从这里尝试 basenameHow to compress a tar file in a tar.gz without directory?,这会删除所有目录。

我也曾尝试在 .add 方法中使用 arcname='app',但是这会破坏目录结构并将大量文件重命名为 app

,从而产生一些奇怪的结果
path = foo + '\' + bar
file = open(path +  '\package.list', 'r')
restore = tarfile.open(path +  '\restore.tar', 'w')
for line in file:
    restore.add(path + '\' + line.strip())
restore.close()
file.close()

使用 Python 2.7

您可以为 TarFile.add 使用第二个参数,它指定了存档中的名称。

所以假设每条路径都是正常的,这样的事情会起作用:

import tarfile
prefix = "some_dir/"
archive_path = "inside_dir/file.txt"
with tarfile.open("test.tar", "w") as tar:
    tar.add(prefix+archive_path, archive_path)

用法:

> cat some_dir/inside_dir/file.txt
test
> python2 test_tar.py
> tar --list -f ./test.tar
inside_dir/file.txt

在生产中,我建议使用适当的模块进行路径处理,以确保每个斜杠和反斜杠都在正确的位置。