我正在尝试从存储在文本文件中的文件列表中创建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。
我从这里尝试basename
:How 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
答案 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
在生产中,我建议使用适当的模块进行路径处理,以确保每个斜杠和反斜杠都在正确的位置。