V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
liloli
V2EX  ›  问与答

难题!如何批量解压缩多个目录下的压缩包?

  •  
  •   liloli · 2012-05-10 15:57:59 +08:00 · 11684 次点击
    这是一个创建于 4580 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大概情况是这样的,有几百个目录,每个目录下有个ZIP文件,每个ZIP文件里还有个RAR文件,RAR文件里才是有用的东西。

    我想找个方法或软件,能够最快速地把每个目录下的ZIP解压到当前目录,再把每个RAR解开,最后删除ZIP和RAR。最后的结果是所有的目录都在,每个目录下只有压缩包里的东西。

    不知道我表述明白没有?
    16 条回复    1970-01-01 08:00:00 +08:00
    Johnny
        1
    Johnny  
       2012-05-10 16:03:18 +08:00
    自己动手写个shell
    ichigo
        2
    ichigo  
       2012-05-10 16:05:04 +08:00
    这个似乎很难,帮顶吧,坐等楼下大神。
    AlloVince
        3
    AlloVince  
       2012-05-10 16:15:14 +08:00   ❤️ 1
    何必写脚本,装个winrar

    文件管理器搜索*.zip

    全选,右键——解压到当前文件夹

    文件管理器搜索*.rar

    全选,右键——解压到当前文件夹

    文件管理器搜索*.rar,全选,删除
    文件管理器搜索*.zip,全选,删除
    wenhuacn
        4
    wenhuacn  
       2012-05-10 16:17:20 +08:00   ❤️ 1
    0day 的东东是吧?
    你google 一下0day 解压,应该有方案
    Weakdancer
        5
    Weakdancer  
       2012-05-10 16:19:43 +08:00
    import os
    #路径
    PATH="C:/"
    #解压
    for path in os.listdir(PATH):
    for f in os.listdir(path):
    if f.endswith("zip"):
    os.system("7z -x"+os.path.join(PATH,path,f))
    for f in os.listdir(path):
    if f.endswith("rar"):
    os.system("7z -x"+os.path.join(PATH,path,f))

    #删除
    for path in os.listdir(PATH):
    for f in os.listdir(path):
    if f.endswith("zip") or f.endswith("rar"):
    os.system("delete"+os.path.join(PATH,path,f))


    import os
    #路径
    PATH="C:/"
    #解压
    for path in os.listdir(PATH):
    for f in os.listdir(path):
    if f.endswith("zip"):
    os.system("7z -x"+os.path.join(PATH,path,f))
    for f in os.listdir(path):
    if f.endswith("rar"):
    os.system("7z -x"+os.path.join(PATH,path,f))

    #删除
    for path in os.listdir(PATH):
    for f in os.listdir(path):
    if f.endswith("zip") or f.endswith("rar"):
    os.system("delete"+os.path.join(PATH,path,f))


    我只是在手机上写了下,可能有问题,需要有7zip
    Weakdancer
        6
    Weakdancer  
       2012-05-10 16:21:41 +08:00   ❤️ 1
    @AlloVince
    就是这样挺简单的,用everything搜索这个目录,全选解压,删除即可
    ydhydh
        7
    ydhydh  
       2012-05-10 16:23:34 +08:00
    https://gist.github.com/2651850

    我比较懒,我只是把所有zip解压放到同一个文件夹下,因为我解压出来的rar是分卷压缩的,所以点一下就可以了,没有继续解压
    liloli
        8
    liloli  
    OP
       2012-05-10 16:31:04 +08:00
    http://lh.rs/EsWWTm3bYzO5
    给各位提供个小的测试一下,按@AlloVince 的办法,我也以为可以,可是所有目录里的包都被解到某一个目录下了。
    liloli
        9
    liloli  
    OP
       2012-05-10 16:34:57 +08:00
    目前用Zipghost实现了第一步,当前是每个目录下有个RAR包了,下一步目前没实现。

    @Weakdancer 谢谢!我不懂代码,不好意思哈!
    Leechael
        10
    Leechael  
       2012-05-10 16:35:16 +08:00
    find ./ -iname '*.zip' -exec unzip {} \; && find ./ -iname '*.rar' -exec unrar {} \;

    上述为思路,并不保证这段 bash 命令能够正确运行。
    liloli
        11
    liloli  
    OP
       2012-05-10 16:50:14 +08:00   ❤️ 1
    感谢各位的热心,尤其感谢@wenhuacn,看到你的关键字突然想起来了,多年以前用过这个软件: 0dayExtractor ,顺利完成任务。
    留个链接给需要的人:
    0dayExtractor v1.3
    http://lh.rs/zwPb7nB81Dih
    CoX
        12
    CoX  
       2012-05-10 17:29:15 +08:00
    sophy
        13
    sophy  
       2012-05-10 19:07:58 +08:00
    这个我觉得一个批处理都搞定了哦
    gavingeng
        14
    gavingeng  
       2012-05-10 23:16:14 +08:00
    #!/bin/bash


    for f in `find . -name "*.zip"`;
    do
    zip -q -r $f;
    #rm -rf $f;
    done

    for f in `find . -name "*.rar"`;
    do
    rar x $f;
    #rm -rf $f;
    done
    kojp
        15
    kojp  
       2012-05-11 00:01:13 +08:00
    shell +1

    各位大大都已经写好了。呵呵,我就不瞎凑热闹了。
    liloli
        16
    liloli  
    OP
       2012-05-15 16:05:13 +08:00
    不能删除发过的回复么?不要下11楼的,有流氓软件,怪我当时太兴奋、太着急。这个安全:http://download.csdn.net/download/popsars/1058897
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2833 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:19 · PVG 22:19 · LAX 06:19 · JFK 09:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.