问个关于 zip 命令的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
notolddriver
V2EX    Linux

问个关于 zip 命令的问题

  •  
  •   notolddriver 2016 年 4 月 26 日 4032 次点击
    这是一个创建于 3651 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Centos6.5 系统

    zip 命令如何删除压缩包内,某层目录下的所有文件,但不删除其本层下其余目录里的文件。

    例如:

    laosiji.zip

    压缩结构为下:

    /siji/laosiji.txt

    /siji/jiazhao.txt

    /siji/py/jiaoyi.txt

    /siji/py/aa.txt

    如何删除 laosiji.txt 和 jiazhao.txt ,但保留 /siji/py/jiaoyi.txt 和 /siji/py/aa.txt

    unzip -l laosiji.zip 为列出压缩结构

    zip -d laosiji.zip /siji/* 会删除 py 目录下的 jiaoyi.txt 与 aa.txt

    因为项目部署频繁,且要删除的文件会不断变化,所以解压出来,删除文件再打包的方法暂不考虑。

    所以请教一下。[发呆]

    10 条回复    2016-05-01 22:10:44 +08:00
    msg7086
        1
    msg7086  
       2016 年 4 月 27 日
    不要解压。直接留在硬盘上,要部署了再打包呢?
    notolddriver
        2
    notolddriver  
    OP
       2016 年 4 月 27 日
    @msg7086 不明白你在说什么。
    我再详细说下:压缩包 laosiji.zip 是项目编译完成后得到的包 [公司使用 Jenkins] ,需要解压到服务器上的相应目录进行部署,每次编译会生成一些配置文件 [/siji/laosiji.txt 和 /siji/jiazhao.txt] ,而我们需要保留使用原服务器上的这些文件 [配置文件] 。

    以下方法因考虑到效率等其他因素暂不考虑:
    1.更改编译方式,使编译时不生成新的配置文件;
    2.压后,进行删除文件操作,再覆盖部署。
    cherrymill
        3
    cherrymill  
       2016 年 4 月 27 日
    考虑用 tar 么,如果考虑用 tar 的话可以动态改变归档结构
    zip 的话,在 WinRAR 下可以做到,原理你可以参考 WInRAR 的执行脚本
    yiyiwa
        4
    yiyiwa  
       2016 年 4 月 27 日
    zip 没怎么用过,

    tar 是可以按文件列表打包,

    zip 刚才 man 了一下,也可以的,

    find . -name "*.[ch]" -print | zip source -@

    find 后,你可以用相关命令再去除一些。。。
    notolddriver
        5
    notolddriver  
    OP
       2016 年 4 月 27 日
    @cherrymill 谢谢啊,先不考虑,因为项目编译完成后得到的是 zip 包 不是 tar 包。若改成 tar 包,又要动刀编译环境配置了。
    notolddriver
        6
    notolddriver  
    OP
       2016 年 4 月 27 日
    @yiyiwa 你这个是按照列表打包吧,我的需求是删除包里的文件。
    bp0
        7
    bp0  
       2016 年 5 月 1 日
    你为什么觉得“ zip -d ”命令就不是“解压出来,删除文件再打包”的呢?
    notolddriver
        8
    notolddriver  
    OP
       2016 年 5 月 1 日
    @bp0 zip -d laosiji.zip /siji/jiazhao.txt 删除压缩包内的 jiazhao.txt ,形成新的压缩包。
    当然本质可能也就是“解压出来,删除文件再打包”,但这里的“解压出来,删除文件再打包”分两种情况。
    1.zip -d 命令集成了这一系列操作。
    2.zip 命令没集成这一操作,我需要把压缩文件分多个命令[1.解压 2.删除文件 3.再打成新包]。

    若可以使用第一种方式完成,是不是尽量不考虑第二种呢?
    bp0
        9
    bp0  
       2016 年 5 月 1 日
    如果第一种情况确实无法满足你的要求,那么只能考虑第二种了。

    但是,第二种的情况也是可以写成一个脚本自动完成的。

    如果你能明确知道要删除的文件的话,"zip -d"命令还是可以满足你的需求的。
    notolddriver
        10
    notolddriver  
    OP
       2016 年 5 月 1 日
    @bp0 那你以为我在这里问什么。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     834 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 21:43 PVG 05:43 LAX 14:43 JFK 17:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86