使用给定目录中的目录路径提取所有文件

时间:2011-11-24 16:04:09

标签: python extract tar

我有一个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。 你能不能帮我解压一下给定文件夹中的这些文件。

2 个答案:

答案 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)