多个7zip文件 递归解压 如何保存原目录结构

求问解压多层目录如何才能解压到各自所在文件夹
通过使用 7za.exe x -r 参数只能解压到统一目录

a/b/c/c1.zip
a/b/c/c2.zip
a/a1.zip

使用 " 7za.exe x -r a/ " 命令会得到

a/c1.txt c2.txt a1.txt

如何才能解压到各自原本所在的文件夹

a/b/c/c1.txt
a/b/c/c2.txt
a/a1.txt

-o 指定输出路径,如a/b/c/c1.zip,用7z x a/b/c/c1.zip -oa/b/c,注意-o和路径之间不要有空格

$ 7z --help

Usage: 7z [...] [...]

[<@listfiles...>]

常用的command如下:

a 添加文件到压缩文件

d 从压缩文件中删除文件

e 从压缩文件中解压缩文件,不包含目录结构

l 列出压缩包中的内容

t 测试压缩文件

u更新文件到压缩文件

x从压缩文件中解压缩,包含目录结构 注意看这里

全压缩:
7zr a -t7z temp.7z ziptest/
排除bbb目录,所有的,任何目录下的bbb目录:
7zr a -t7z temp.7z ziptest/ -xr!bbb
排除bbb文件,所有的,任何目录下的bbb文件:
7zr a -t7z temp.7z ziptest/ -x!bbb
排除.svn目录:
7zr a -t7z temp.7z ziptest -xr!.svn
7zip排除目录的路径里不能用当前目录 . ,如 -xr!./.svn,会过滤失败, .svn 还会压缩进去。
也可以把要排除的目录路径写入文件,例如:

ziptest_x.txt:

ziptest/.svn

ziptest/bbb

7zr a -t7z temp.7z ziptest/ -xr@ziptest_x.txt

如果是排除的是文件,把要排除的各个文件名写入一个文件,用 -x@x_fn.txt 就可以排除所写文件。

$ 7z a study.7z study/ ~ 将study整个目录添加到压缩包study.7z中
$ 7z t study.7z ~ 测试压缩包
$ 7z x study.7z ~ 解压缩包到当前目录
$ 7z d study.7z study/d2/f2.php ~ 删除压缩包中的指定文件
$ 7z t study.7z ~ 测试压缩包
$ 7z l study.7z ~ 查看压缩包中的目录结构
$ 7z u study.7z study/d1/d11/f1.c ~ 更新压缩包中的指定文件
$ 7z l study.7z ~ 查看压缩包中的目录结构

下载的一个python学习资料,打开以后将近100的zip包,单独手动解压太麻烦了,就想到了代码解决,不得不说一句,懒则思变啊下面是用python对文件夹进行循环读取,并解压到原路径下

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import zipfile
import os
"""
@attention: 
"""
#获取文件文件目录下所有文件名,并放到list中
def upzip(path):
    file_list = os.listdir(path)
    zip_list = []
    for file_name in file_list:
        zip_name = os.path.join(path,file_name)
        zip_list.append(zip_name)
    for_list(zip_list)
    #print(zip_list)


'''#遍历list'''
def for_list(list):
    print("遍历文件名")
    for name  in list:
        if ".zip" in  name:
            #print("文件名为: " + name)
            unzip(name)


'''解压文件'''
def unzip(filename):
    #print("解压文件开始")
    if os.path.splitext(filename)[1] != '.zip':
        pass
    else:
        zip_file = zipfile.ZipFile(filename,'r')
        if os.path.isdir(filename):
            pass
        else:
            new_fname = filename.split(".")
            os.mkdir(new_fname[0])
            print("开始解压文件 " + filename)
        for names in zip_file.namelist():
            zip_file.extract(names, new_fname[0])
        zip_file.close() 


if __name__ == "__main__":
    path = "D:\零基础入门学习Python"
    upzip(path)