压缩打包文件是十分常见的操作, 所以今天整理了一些关于 zip 指令的内容。

zip 打包

zip 指令的格式为:

zip [参数] <目标文件> <源内容>

可以使用的参数有:

</tr> </tr> </tr> </tr> </tr> </tr> </tr> </table> 举个栗子, 我们将 `sourcefile.txt` 文件压缩为 `zipfile.zip` 并设置密码为 `password`: ```console zip -r -P password zipfile.zip sourcefile.txt ``` 要打包/压缩文件夹也是可以的, 例如 将 `~/Desktop/my_photos/` 这个目录下所有文件和文件夹打包为当前目录下的 `~/Desktop/photos.zip`: ```console zip -q -r photos.zip ~/Desktop/my_photos ``` 第二个例子中我们没有设置密码, 但是因为打包的是文件夹, 文件夹中的内容可能较多, 所以使用了 `-q` 来惯出打包过程中终端的输出信息。 ## unzip 解包 `unzip` 指令的格式为: ```console unzip [参数] <压缩文件> [压缩包中将被释放的文件] ``` 可以使用的参数有:
参数 说明
-r 递归,将指定目录下的所有文件和子目录一并处理
-S 包含系统和隐藏文件
-y 直接保存符号连接,而非该连接所指向的文件
-X 不保存额外的文件属性
-m 将文件压缩并加入压缩文件后,删除源文件
-<压缩级别></code></td> 1~9,数字越大,压缩率越高
-F 尝试修复已损坏的压缩文件
-T 检查备份文件内的每个文件是否正确无误
-q 不显示指令执行过程
-g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件
-u 更新压缩包内文件
-f 更新压缩包内文件。如果符合条件的文件没有包含在压缩包中,则压缩后添加
-$ 保存第一个被压缩文件所在磁盘的卷标
-j 只保存文件名称及其内容
-D 压缩文件内不建立目录名称
-i <表达式></code></td> 压缩目录时,只压缩符合条件的文件
-x <表达式></code></td> 排除符合条件的文件
-n <文件名后缀></code></td> 排除指定文件名后缀的文件
-b <缓存路径></code></td> 指定临时文件目录
-d <表达式></code></td> 从压缩文件内删除指定的文件
-t <日期时间></code></td> 把压缩文件的日期设成指定的日期
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同
-A 调整可执行的自动解压缩文件
-c 替每个被压缩的文件加上注释
-z 替压缩文件加上注释
-k 使用MS-DOS兼容格式的文件名称。
-l 压缩文件时,把LF字符置换成LF+CR字符。
-ll 压缩文件时,把LF+CR字符置换成LF字符。
</tr> </tr> </tr> </table> 举个栗子, 解压当前目录下的 `zipfile.zip` 到 `~/Desktop/myzipfiles/` 目录下: ```console unzip -q -n -P password zipfile.zip -d ~/Desktop/myzipfiles/ ```
参数 说明
-P <密码></code></td> zip压缩包的密码
-d <路径></code></td> 指定解压路径
-n 解压缩时不覆盖原有文件
-f 覆盖原有文件
-o 不经询问,直接覆盖原有文件
-u 覆盖原有文件,并将压缩文件中的其他文件解压缩到目录中
-l 显示压缩文件内所包含的文件
-t 检查压缩文件是否正确
-z 显示压缩包注释
-Z unzip -Z等于执行zipinfo指令
-j 不处理压缩文件中原有的目录路径
-C 压缩文件中的文件名称区分大小写
-L 将压缩文件中的全部文件名改为小写
-s 将文件名中的空格转换下划线
-X 解压缩时保留文件原来的UID/GID
-q 执行时不显示任何信息
-v 执行是时显示详细的信息
-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换
-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
-a 对文本文件进行必要的字符转换
-b 不要对文本文件进行字符转换
-x <表达式></code></td> 处理里排除压缩包中的指定文件
-M 将输出结果送到more程序处理