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