zip 是一个非常常见的压缩工具,很多平台包括 Unix, VMS, MSDOS, OS/2, Windows 9x/NT/XP, Minix, Atari, Macintosh, Amiga, and Acorn RISC OS 等都有应用。zip 结合了打包和压缩。

基本使用

参数非常多

zip options archive inpath infile
zip [-aABcdDeEfFghjklLmoqrRSTuvVwXyz!@$] [--longoption ...]  [-b path] [-n suffixes] [-t date] [-tt date] [zipfile [file ...]]  [-xi list]
  • -h 帮助
  • -d 把压缩文件解到指定目录下
  • -m 将文件压缩后,删除源文件
  • -q 安静模式,压缩时不显示执行的执行过程
  • -r 将执行的目录下所有子目录及文件一同处理
  • -S 包含系统文件和隐藏文件
  • -n 不覆盖已有的文件
  • -o 覆盖已存在的文件且不要求用户确认
  • -x 文件列表 解压缩文件,但不包括指定的 file 文件
  • -v 查看压缩文件目录,但不解压
  • -t 测试文件有无损坏,但不解压
  • -j 不重建文档的目录结构,把所有文件解压到同一目录下

实例

将文件及文件夹打包到 dest.zip 中。

zip -r dest.zip path/to/folder file
zip dest.zip file1 file2

压缩时排除某些目录

zip -r dest.zip folder -x *.git*

使用密码压缩文件

zip -r -P password dest.zip file folder

解压文件

unzip dest.zip

解压文件到特定文件夹 -d 参数指定

unzip dest.zip -d /path/to/folder

不解压查看压缩包内部内容

unzip -l dest.zip
unzip -v dest.zip

在 Linux 下经常遇到 zip 乱码的情况呢,其实因为 Windows 或者其他系统下生成默认使用 GBK/GB2312 编码,而在 Linux 下默认为 UTF8,所以可以使用 unzip 的 -O 参数,这个参数 只有 unzip 1.6 及以上版本才有。

unzip -O cp936 file.zip -d /path/to/folder

外延

Linux 下经常遇到 tar.gz tar.bz2 这样的压缩包,这个时候可能就需要使用到 tar 这个命令。

reference

  • man zip
  • man unzip