技术解析

问个关于 zip 命令的问题
0
2021-07-02 16:37:29
idczone

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

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

所以请教一下。[发呆]


不要解压。直接留在硬盘上,要部署了再打包呢?

不明白你在说什么。
我再详细说下:压缩包 laosiji.zip 是项目编译完成后得到的包 [公司使用 Jenkins] ,需要解压到服务器上的相应目录进行部署,每次编译会生成一些配置文件 [/siji/laosiji.txt 和 /siji/jiazhao.txt] ,而我们需要保留使用原服务器上的这些文件 [配置文件] 。
以下方法因考虑到效率等其他因素暂不考虑:
1.更改编译方式,使编译时不生成新的配置文件;
2.解压后,进行删除文件操作,再覆盖部署。

考虑用 tar 么,如果考虑用 tar 的话可以动态改变归档结构
zip 的话,在 WinRAR 下可以做到,原理你可以参考 WInRAR 的执行脚本

zip 没怎么用过,
tar 是可以按文件列表打包,
zip 刚才 man 了一下,也可以的,
find . -name "*.[ch]" -print | zip source [email&后,你可以用相关命令再去除一些。。。

谢谢啊,先不考虑,因为项目编译完成后得到的是 zip 包 不是 tar 包。若改成 tar 包,又要动刀编译环境配置了。

你这个是按照列表打包吧,我的需求是删除包里的文件。

你为什么觉得“ zip -d ”命令就不是“解压出来,删除文件再打包”的呢?

zip -d laosiji.zip /siji/jiazhao.txt 删除压缩包内的 jiazhao.txt ,形成新的压缩包。
当然本质可能也就是“解压出来,删除文件再打包”,但这里的“解压出来,删除文件再打包”分两种情况。
1.zip -d 命令集成了这一系列操作。
2.zip 命令没集成这一操作,我需要把压缩文件分多个命令[1.解压 2.删除文件 3.再打成新包]。
若可以使用第一种方式完成,是不是尽量不考虑第二种呢?

如果第一种情况确实无法满足你的要求,那么只能考虑第二种了。
但是,第二种的情况也是可以写成一个脚本自动完成的。
如果你能明确知道要删除的文件的话,"zip -d"命令还是可以满足你的需求的。

那你以为我在这里问什么。。。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服