马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
打包和压缩在 Linux 里常被混为一谈,其实是两件事:打包是把一堆文件合成一个归档文件,压缩是让这个归档(或单个文件)体积变小。tar 负责打包、也能搭配压缩算法;zip/unzip 则是自带压缩的一整套。这篇把 tar、zip、unzip 的常用参数、典型命令和几个容易踩的坑一次讲清楚。
一、 tar:归档的主力
tar(tape archive)最初是为磁带设备设计的,如今已成为文件操作的标准工具:能把一组文件和目录打包成单个归档文件,也能从归档里还原出来。它的语法是 tar [选项] file.tar [文件...]。
1.1 常用参数
-c:创建新的归档文件(打包)。
-x:从归档文件中提取文件(解包)。
-f:指定归档文件名,通常必须写。
-v:显示操作的详细信息,能看到处理了哪些文件。
-z:通过 gzip 方式压缩归档文件(产出 .tar.gz)。
-j:通过 bzip2 方式压缩归档文件(产出 .tar.bz2)。
-C:指定目录,解包或打包时切到目标路径。
1.2 常规操作
tar -cvf file.tar file1 # 把 file1 打包成一个文件
tar -cvf aa.tar aa/ # 把 aa 目录打包
tar -zcvf aa.tar.gz aa/ # 打包并用 gzip 压缩
tar -tvf aa.tar # 查看归档文件内容(不解压)
tar -xvf aa.tar # 解压到当前路径
tar -xvf aa.tar -C bb/ # 解压到指定目录
记忆口诀:-c 建、-x 解、-t 看、-v 显过程、-f 后面跟文件名。-z(gzip)和 -j(bzip2)决定用什么算法压,后缀名要跟算法对上,不然别人解不开。
二、 zip:自带压缩
zip 的语法是 zip file.zip [选项] 文件,压缩目录要加 -r。
2.1 常用参数
-r:递归压缩文件夹。
-q:不显示压缩过程,静默执行。
-d:从压缩包里删除指定文件。
-u:更新现有 zip,把新文件或改过的文件加进去。
-f:刷新(只更新已存在的指定文件)。
-m:把文件移进 zip,同时删掉源文件(移动归档)。
-e:对 zip 加密(会提示输入两次密码)。
-z:给压缩包加注释。
2.2 常规操作
zip aa.zip aa.tar # 压缩某个文件
zip -r aa.zip aa/ # 压缩某个目录
zip -q -r aa.zip aa/ # 静默压缩
zip file.zip -d file5 # 从压缩包删除某个文件
zip file.zip -u file5 # 更新(新增/替换)某个文件
zip file.zip -f file5 # 刷新已存在的那个文件
zip file.zip -m file6 # 加进去并删除源文件
zip test.zip file* -e # 压缩并加密
zip test.zip file* -z # 压缩并添加注释
注意 -m 会把源文件删掉,执行前先想清楚;-e 的密码是无提示输入的,忘了就只能靠 unzip -P 配合猜,所以加密包务必自己记牢密码。
三、 unzip:解压与检查
unzip 用来解压 zip 包,语法 unzip [选项] 压缩包名。
3.1 常用参数
-l:列出压缩包内包含的文件(不解压)。
-t:测试压缩包是否完整正确。
-v:执行时显示详细信息。
-z:只显示压缩文件的备注文字。
-n:解压时不要覆盖已有文件。
-P:用 zip 的密码解包。
-q:不显示任何信息。
-d:指定解压后存放的目录。
3.2 常规操作
unzip -l t.zip # 只看内容不解压
unzip t.zip -d test/ # 解压到指定目录(目录不存在会自动建)
unzip -t t.zip # 测试压缩包有效性
unzip -q t.zip # 静默解压
有个细节值得留意:用 zip -r t.zip test/ 打出来的包里路径是 test/file1 这种,再 unzip t.zip -d a/ 会在 a/ 下再套一层 test。想扁平一点,打包时先看结构、或者用 -j 去掉路径层级。
四、三种格式怎么选
.tar.gz(tgz):Linux 下最常见,速度快、兼容性好,日志 和源码包首选。
.tar.bz2:压缩率更高但更慢,适合不急着解压的大数据集。
.zip:Windows 和 Linux 都能直接开,需要跨系统传文件、或者要加密时选它。
五、常见坑
tar: Cowardly refusing to create an empty archive:命令行写错,-f 后面忘了跟文件名。
gzip: stdin: not in gzip format:用 -z 解了一个没压缩的 tar,去掉 -z 试试。
- 解出来路径多一层:打包时压了目录本身,解压目标目录又建了一次,规划好
-C。
- 解压覆盖掉重要文件:先
unzip -n 或者先 unzip -l 看一遍再动手。
- 磁盘不够:压之前
df -h 看一眼,tar 打包过程中会同时存在原文件和归档两份。
整体记住一句话:Linux 打包压缩分工是 tar 管归档、gzip/bzip2 管压缩、zip 一把梭,按场景选工具就顺了。
qidao123.com企服评测-应用市场 编辑提示 |