为了详细说明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
本文由小韦云原创,转载请注明出处:http://bctos.cn/doc/12/1920,否则追究其法律责任
关键词:zip -x 排除目录 排除文件