linux 命令:zip 详解
zip 命令的功能是打包和压缩文件。
用法
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
如果 zipfile 未提供,压缩标准输入并把结果写到标准输出。
选项
-A 调整自解压程序。
-c 添加单行注释。
-d 从 zipfile 中删除条目。
-db 展示正在执行的字节数和尚未执行(压缩)的字节数。
-dc 展示正在执行的文件数和尚未执行(压缩)的文件数。
-dd 每10MB展示为一个点。
-dg 将整个归档用点代表,而不是为每个文件。
-ds 每个点都代表一个 siz ,其中 siz 是以 nm 为单位作为分割(0 代表没有点)。
-D 不添加目录条目。
-DF 也写作 --dif。只包括有改变的文件或比输入归档较新的文件。
-e 设置解压权限,使用标准(弱)PKZip 2.0 编码,提示输入密码。
-f 只更新有改变的文件。
-F 修复 zipfile(-FF 更努力地修复)。拷贝潜在损坏的归档中的文件到新归档中。 -F 尝试正常读取归档并仅复制完整条目,而 -FF 尝试挽救可能导致不完整条目 的内容。必须使用 --out 指定输出的归档。使用 -v 查看详细信息。
-FS 如果日期或大小改变了就更新,系统不存在的文件就删除。
-i 压缩时只包括的文件。
-ic 大小写不敏感。
-j 不压缩目录,只压缩文件。
-J 删除 zipfile 中的前缀(unzipsfx)。
-l 将 LF 转换为 CR LF (-ll 是将 CR LF 转换为 LF)。
-lf path 打开 path 的文件作为日志文件(覆盖已存在的文件)。
-la 追加到已存在的日志文件。
-li 包括 info 信息(默认只有警告和错误信息)。
-m 将文件移动到 zipfile 中,并从系统中删除源文件。
-n 不压缩具有指定后缀的文件。
-o 以压缩文件列表中最新的文件的更新时间为压缩文件的更新时间。
--out 输出到新的归档。如果输入是拆分的,输出将会默认为相同的拆分大小。使用 -s=0 或 -s- 来关闭拆分。如果覆盖旧的拆分归档,但是需要的拆分数量较少, 旧的拆分归档没有被覆盖的就保持原状。
-P 使用标准编码,设置密码。
-q 不显示执行过程。
-r 递归目录。
-R 递归当前目录中匹配的文件。
-s ssize 使用大小为 ssize 的拆分文件大小创建拆分存档。
-sp 在每个拆分操作结束时暂停,来切换磁盘。
-sb 暂停时响铃。
-sv 创建拆分时显示详细信息。
-sf 展示操作的文件后退出(-sf- 日志文件专属)。
-su 类似 -sf 但是展示转义 UTF-8 Unicode 名称,如果存在。
-sU 类似 -sf 但是展示转义 UTF-8 Unicode 名称。
-t 包括在指定日期当天货之后有修改的文件。
-tt 包括在指定日期之前有修改的文件。日期格式(mmddyyyy 或 yyyy-mm-dd)。
-T 测试 zipfile 的完整性。
-TT cmd 使用命令 cmd 测试归档。
-u 只更新有改变的文件或新文件。
-U 从 zipfile 中选择文件复制(和 --out 一起使用)。等于 --copy。
-v 显示详细执行信息。如果只执行 “zip -v”,则展示版本信息。
-x 压缩时排除文件。
-X 排除额外的文件属性。
-y 将软链作为链接保存,而不是作为文件。
-z 添加 zipfile 的注释。
-Z 后接压缩方式:store(只保存,等于 -0),deflate(压缩,默认值),如果系统支 持 bzip2,可以使用 bzip2 方式。
-0 只保存,不压缩。
-1~-9 1是更快地压缩,9是更好地压缩,默认值是6。
-@ 从标准输入读取文件名。
通配符
? 匹配任意单个字符。
* 匹配任意个数的字符,包括0(0 到 正无穷)
[list] 匹配 list 中的字符(正则),可以使用范围表示 [ac-f],排除字符 [!bf]
一般情况下,* 会跨越目录级别,比如 'a*b' 可以匹配 'ac/db'。如果使用 -ws,* 不会跨越, **会跨越。
使用示例:
1. 递归当前目录并压缩以 .h 为结尾的文件:
zip zipfile -r . -i "*.h"
2. 压缩 path 到 zipfile,排除 pattern:
zip -x pattern pattern @ zipfile path path ...
3. 归档更新:
zip zipfile -FS -r dir
4. 从 inarchive 复制 pattern 文件到 outarchive:
zip inarchive --copy pattern pattern ... --out outarchive
5. 从 old_archive 复制以 .c 结尾的文件(排除foo.c)到 new_archive:
zip old_archive --copy "*.c" --out new_archive -x foo.c
6. 修复 bad.zip 为 fixed.zip:
zip -F bad.zip --out fixed.zip
zip bad.zip -FF -v --out fixed.zip
7. 递归当前目录,如果有 foofull 中没有的文件或有改变的文件,就压缩到 foonew 中:
zip -r foofull . -DF --out foonew