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

问个关于 zip 命令的问题

  •  
  •   notolddriver · 2016-04-26 21:21:50 +08:00 · 3514 次点击
    这是一个创建于 3150 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    若可以使用第一种方式完成,是不是尽量不考虑第二种呢?
    bp0
        9
    bp0  
       2016-05-01 17:22:01 +08:00
    如果第一种情况确实无法满足你的要求,那么只能考虑第二种了。

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

    如果你能明确知道要删除的文件的话,"zip -d"命令还是可以满足你的需求的。
    notolddriver
        10
    notolddriver  
    OP
       2016-05-01 22:10:44 +08:00
    @bp0 那你以为我在这里问什么。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 11:46 · PVG 19:46 · LAX 03:46 · JFK 06:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.