Python tar.add文件,但省略父目录

时间:2017-11-08 10:46:28

标签: python python-2.7 tar

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

package.list文件如下:

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

如果我省略restore.add中的路径,由于我的程序从其他地方运行,它找不到文件。如何告诉tar从特定目录开始,或添加文件,但保持从文本文件中获取的目录结构,例如从app开始而不是所有父目录

我的目标是tar cf restore.tar -T package.list,但在Windows上使用Python。

我从这里尝试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

1 个答案:

答案 0 :(得分:1)

您可以使用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

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