在服务器上敲 unzip,返回 command not found;换一台机器装好了,解压出来文件名全是问号。linux zip 解压 的坑,基本都集中在这两步。
先装工具:CentOS 用 yum install unzip,Ubuntu 用 apt install unzip。然后 unzip 文件名.zip 解到当前目录,加 -d /tmp/目标目录 指定位置,-l 只列表不解压,-o 覆盖已有文件不再询问,-q 安静模式少刷屏。
解压到系统目录要 sudo,普通用户没权限,报错通常是 Permission denied。
中文文件名乱码怎么处理
Windows 打的 zip 一般用 GBK 编码,Linux 默认按 UTF-8 读,中文就花了。unzip -O GBK 文件名.zip 可以指定编码,部分发行版的 unzip 没编译这个选项,会提示 invalid option,那就换 7z x 文件名.zip 解。文件名乱码但内容没坏,转码或者重新解压都能救,别急着删。
覆盖和权限的两个默认行为
同名文件默认会逐个问 y/n,脚本里跑记得加 -o,不然会卡在那里等输入。解压出来的权限按压缩包里记录的走,丢没丢执行位可以用 unzip -Z 看一眼。压缩包来自别人,先 -l 看目录结构,防止解出一堆文件散在当前目录。
大文件和分卷
超过 4G 的压缩包要支持 zip64 的工具,老版本 unzip 会直接报错。分卷压缩的 zip 要把所有分卷放同一个目录,解第一个就行,少一个都解不开。空间也要先看,df -h 一眼,压缩包解开后一般比原文件大,磁盘满了会解到一半失败;反过来打包用 zip -r 包名.zip 目录名,-r 不能少,少了只存空目录。
linux zip 解压 完记得核对文件数量,尤其是打包传输过的项目。解压前用 unzip -t 测试压缩包完整性,网络传输出错能提前发现。再提醒一句,zip 不是 tar.gz,参数不通用,别把 unzip 的习惯带到 tar 上;7z 的安装包在多数发行版里叫 p7zip,命令是 7z x,不是 7zip。