使用7z命令行从存档文件中提取特定文件夹中的特定文件

10

我正在编写一个Python脚本,需要调用7z从存档文件中提取目录内的一些文件,而不必解压整个存档文件。 存档文件包含多个目录,我需要从特定目录中提取一些文件。

假设"abc.7z"是一个存档文件,其中包含多个目录,例如 "temp"、"windows"、"system"、"data"。 我只想从"system"目录中提取一些.exe文件,因为这些.exe文件也可能存在于其他目录中,但我只对"system"目录中的文件感兴趣。

我只需要7z命令; 调用7z的方法我会自己找。 感谢你的帮助。

2个回答

27

您可以在命令行的末尾指定文件/文件夹过滤器。请查看此链接,获取有关7zip命令行命令和选项的更多详细信息。

7z.exe x [archive.7z] -o[output_dir] [filter]

例如:7z.exe x abc.7z -aoa -oC:\Temp system

您还可以从系统文件夹中指定特定类型的文件。例如,system\*.exe将提取system目录中的所有.exe文件。

-aoa选项是覆盖模式。

要从Python调用它,您可以使用subprocess模块。类似于:

import subprocess

cmd = []
cmd.append(r'C:\Program Files\7-Zip\7z.exe')
cmd.append('x')
cmd.append(archive)
cmd.append('-aoa')
cmd.append('-o{}'.format(dst_part))
cmd.append(file_folder_filter)
subprocess.call(cmd)

这意味着 7z.exe x abc.7z -aoa -oC:\Temp system\*.exe 将是提取system文件夹中仅包含 .exe 文件的最终命令。 - ρss
在我的这一边,我需要在前面添加'.'才能使其工作。也就是说,为了仅提取'system'目录,我需要传递'./system'。 - frachop
注意:如果您想获取不带zip文件内路径的文件,可以使用“e”代替“x”。 - Roman
关于通配符的提示:对于bash用户,请使用撇号以避免bash尝试扩展通配符。例如 7z e abc.7z "system/*.exe" - Roman

5

从 7z 压缩包中提取特定目录的步骤:

特定目录:rootdir/firstson/second

压缩文件:test.7z

要使用的命令:

7z x test.7z rootdir/firstson/second

实际上,我需要传递'./rootdir/firstson/second'才能使其工作。 - frachop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接