问个关于 zip 命令的问题

2016-04-26 21:21:50 +08:00
 notolddriver

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

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

所以请教一下。[发呆]

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

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

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

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

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

find 后,你可以用相关命令再去除一些。。。
notolddriver
2016-04-27 20:12:02 +08:00
@cherrymill 谢谢啊,先不考虑,因为项目编译完成后得到的是 zip 包 不是 tar 包。若改成 tar 包,又要动刀编译环境配置了。
notolddriver
2016-04-27 20:14:53 +08:00
@yiyiwa 你这个是按照列表打包吧,我的需求是删除包里的文件。
bp0
2016-05-01 13:19:10 +08:00
你为什么觉得“ zip -d ”命令就不是“解压出来,删除文件再打包”的呢?
notolddriver
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
2016-05-01 17:22:01 +08:00
如果第一种情况确实无法满足你的要求,那么只能考虑第二种了。

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

如果你能明确知道要删除的文件的话,"zip -d"命令还是可以满足你的需求的。
notolddriver
2016-05-01 22:10:44 +08:00
@bp0 那你以为我在这里问什么。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/274612

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX