小韦云博文

zip打包压缩-x排除目录或文件的用法详解

小韦云科技-区块链+小程序+公众号+商城+分销+直播+企业官网+外贸电商-为您提供优质的开发服务-电话/微信联系:18123611282

为了详细说明zip在打包压缩命令的-x选项的用法,我们先创建以下演示的目录和文件

testzip
├── aaa
│   ├── 456.txt
│   ├── 789.log
│   ├── bbb
│   │   ├── ccc
│   │   │   └── 123.txt
│   │   └── ddd
│   │       └── 123.txt
│   └── eee
│       └── 123.txt
└── bbbb
    └── hhh

正常情况使用命令

[root@peer2-org1 ~]# zip -r test.zip testzip
updating: testzip/ (stored 0%)
updating: testzip/aaa/ (stored 0%)
updating: testzip/aaa/bbb/ (stored 0%)
updating: testzip/aaa/bbb/ccc/ (stored 0%)
updating: testzip/aaa/bbb/ccc/123.txt (stored 0%)
updating: testzip/aaa/bbb/ddd/ (stored 0%)
updating: testzip/aaa/bbb/ddd/123.txt (stored 0%)
updating: testzip/aaa/eee/ (stored 0%)
updating: testzip/aaa/eee/123.txt (stored 0%)
updating: testzip/bbbb/ (stored 0%)
updating: testzip/bbbb/hhh/ (stored 0%)
updating: testzip/aaa/456.txt (stored 0%)
  adding: testzip/aaa/789.log (stored 0%)

会把testzip里所有的文件和目录都打包。下面按常用的几种情形来说明

排除单个文件

这是最简单的情况,假如要排除上面的456.txt,命令如下

[root@peer2-org1 ~]# zip -r test.zip testzip -x testzip/aaa/456.txt
updating: testzip/ (stored 0%)
updating: testzip/aaa/ (stored 0%)
updating: testzip/aaa/bbb/ (stored 0%)
updating: testzip/aaa/bbb/ccc/ (stored 0%)
updating: testzip/aaa/bbb/ccc/123.txt (stored 0%)
updating: testzip/aaa/bbb/ddd/ (stored 0%)
updating: testzip/aaa/bbb/ddd/123.txt (stored 0%)
updating: testzip/aaa/eee/ (stored 0%)
updating: testzip/aaa/eee/123.txt (stored 0%)
updating: testzip/bbbb/ (stored 0%)
updating: testzip/bbbb/hhh/ (stored 0%)
updating: testzip/aaa/789.log (stored 0%)

和上面全部打包的对比就会发现456.txt这个文件已经不在打包的清单中了。

排除全部同名的文件

上面不同的目录里都有123.txt,如果想把它排除,可以把目录路径用*号代替

zip -r test.zip testzip -x */123.txt

这样所有的123.txt也能排除掉

排除相同后缀的文件

这里*号前要加反斜杠

zip -r test.zip testzip -x \*.txt

排除指定目录

假如要排除bbb目录,以下三种方法都可以

zip -r test.zip testzip -x */bbb/*
zip -r test.zip testzip -x testzip/aaa/bbb/\*
zip -r test.zip testzip -x \*/aaa/bbb/\*

但经测以下几种都无效,尤其是第一种很容易让人犯错

zip -r test.zip testzip -x testzip/aaa/bbb
zip -r test.zip testzip -x testzip/aaa/bbb/
zip -r test.zip testzip -x testzip/aaa/bbb/*
zip -r test.zip testzip -x */aaa/bbb/*

还有,如果使用*bbb*还会错误把bbbb目录也排除了,因此如果是目录的话建议都加要斜杠

多个排除条件组合(重点)

多个排除条件时,每个条件使用空格隔开,如要同时排除bbb目录(及子目录) 789.log文件和所有txt后缀的文件,命令如下

zip -r test.zip testzip -x */bbb/* */789.log \*.txt

其中规范的写法是星号(*)前都加上反斜杠,以防止在shell中被当特殊字符使用,完整的写法

zip -r test.zip testzip -x \*/bbb/\* \*/789.log \*.txt

本文由小韦云原创,转载请注明出处:https://www.bctos.cn/doc/12/1920,否则追究其法律责任

关键词:zip -x 排除目录 排除文件

广告位招商