我有一个tar存档,其中有一个我需要在给定目录中提取的目录。 例如:我有一个目录
TarPrefix / X / Y / Z
在tar存档中我想在给定的目标目录中提取它,例如:extract / a / this目录应该包含目录TarPrefix / x / y / z中包含的所有文件和目录。
subdir_and_files = [ tarinfo for tarinfo in tar.getmembers()
if tarinfo.name.startswith("subfolder/")
]
获取目录路径“subfolder /”中所有成员的列表,然后使用tar.extractall(extracted/a,subdir_and_files)
提取它
但它使用目录路径提取所有成员例如,这会导致提取/ a / x / y / z。
你能不能帮我解压一下给定文件夹中的这些文件。
答案 0 :(得分:13)
看起来你可能已经找到了答案,但无论如何这里是我的版本:
import sys, tarfile
def get_members(tar, prefix):
if not prefix.endswith('/'):
prefix += '/'
offset = len(prefix)
for tarinfo in tar.getmembers():
if tarinfo.name.startswith(prefix):
tarinfo.name = tarinfo.name[offset:]
yield tarinfo
args = sys.argv[1:]
if len(args) > 1:
tar = tarfile.open(args[0])
path = args[2] if len(args) > 2 else '.'
tar.extractall(path, get_members(tar, args[1]))
答案 1 :(得分:2)
with tarfile.open('sourcefile.tgz', 'r:gz') as _tar:
for member in _tar:
if member.isdir():
continue
fname = member.name.rsplit('/',1)[1]
_tar.makefile(member, 'desination_dir' + '/' + fname)