12.压缩和打包

发布于:2025-08-30 ⋅ 阅读:(21) ⋅ 点赞:(0)

压缩和打包

1. 压缩和解压缩

主要针对单个文件压缩,而非目录

1.1 compress 和 uncompress

此工具来自于ncompress包,此工具目前已经很少使用

对应的文件是 .Z 后缀

compress [OPTION]... [FILE]...
uncompress [OPTION]... [FILE]...

-d # 解压缩,相当于于uncompress
-c # 结果输出至标准输出,不删除原文件
-f # 覆盖己存在目标文件
-v # 显示过程
-r # 递归压缩目录里面所有文件

1.2 gzip和gunzip

来自于 gzip 包

对应的文件是 .gz 后缀

gzip [OPTION]... FILE ...
gunzip [OPTION]... FILE ...

-c|--stdout 		# 将压缩数据输出到标准输出中,并保留原文件
-d|--decompress 	# 解压缩,相当于gunzip
-f|--force 			# 覆盖己存在目标文件
-k|--keep 			# 保留原文件
-l|--list 			# 显示原文件大小,压缩文件大小,压缩比,压缩前文件名
-q|--quiet 			 # 安静模式,忽略警告
-r|--recursive 		# 递归压缩目录内所有文件
-S|--suffix=SUF 	 # 指定压缩文件后缀
-t|--test 			 # 测试,检测压缩文件是否完整
-v|--verbose 		 # 显示过程
-1|--fast 			 # 最快压缩,压缩比最底,但压缩速度快
-9|--best 			 # 最好压缩,压缩比最高,但压缩速度慢
-N 					 # 指定压缩等级,取值为1-9之间,默认6

1.3 bzip2和bunzip2

来自于 bzip2 包

对应的文件是 .bz2 后缀

bzip2 [OPTION]... FILE ...
bunzip2 [OPTION]... FILE ...

-d|--decompress 	# 解压缩,相当于bunzip2
-z|--compress 		# 强制压缩
-k|--keep 			# 保留原文件
-f|--force 			# 覆盖己存在目标文件
-t|--test 			# 测试,检测压缩文件是否完整
-c|--stdout 		# 将压缩数据输出到标准输出中,并保留原文件
-q|--quiet 			# 安静模式,忽略警告
-v|--verbose 		# 显示过程
-N 					# 指定压缩等级,取值为1-9之间,默认9
--fast 				# 同 -1
--best 				# 同 -9

1.4 xz 和 unxz

来自于 xz 包

对应的文件是 .xz 后缀

xz [OPTION]... FILE ...
unxz [OPTION]... FILE ...

-z|--compress 		# 强制压缩
-d|--decompress 	# 解压缩,相当于unxz
-t|--test 			# 测试,检测压缩文件是否完整
-l|--list 			# 查看压缩文件相关信息
-k|--keep 			# 保留原文件
-f|--force 			# 覆盖己存在目标文件
-c|--stdout 		# 将压缩数据输出到标准输出中,并保留原文件
-T|--threads=NUM 	# 开多线程,默认1
-q|--quiet 			# 安静模式,忽略警告
-v|--verbose 		# 显示过程
-N 					# 指定压缩等级,取值为1-9之间,默认6

1.5 zip 和 unzip

zip 可以实现打包目录和多个文件成一个文件并压缩,但可能会丢失文件属性信息,如:所有者和组信息

分别来自于 zip 和 unzip 包

对应的文件是 .zip 后缀

zip [OPTION]... zipfile [FILE]...
unzip [OPTION]... zipfile [FILE]...

# zip常用选项
-f 	# 更换较新的文件到压缩文件内
-u 	# 如果压缩包内有,则更新,如果没有,则追加进去
-d 	# 从压缩包内删除指定的文件
-m 	# 将文件压缩之后,删除原始文件
-r 	# 递归压缩目录
-j 	# 只保存文件名称及其内容,而不存放任何目录名称
-l 	# 压缩文件时,把LF字符置换成LF+CR字符,unzip -l 表示显示压缩文件的内容
-1 	# 最快压缩,数字1
-9 	# 最高压缩比,数字9
-q 	# 安静模式
-v 	# 显示过程
-c 	# 替每个被压缩的文件加上注释
-z 	# 给压缩包加注释,unzip -z 查看注释
-x 	# 压缩时排除指定文件
-i 	# 仅压缩指定文件
-D 	# 压缩文件内不建立目录名称
-T 	# 测试,检测压缩文件是否完整
-X 	# 不保存额外的文件属性
-y 	# 直接保存符号连接,而非该链接所指向的文件
-n 	# 不压缩以特定字符串结尾的文件
-P 	# 加密码

# unzip常用选项
-p 	# 将压缩内容通过管道传送
-l 	# 显示压缩文件内所包含的文件
-t 	# 测试,检测压缩文件是否完整
-z 	# 查看注释
-v 	# 列出包内文件信息
-x 	# 指定不需要解压缩的文件
-d 	# 指定解压后的目标目录
-n 	# 解压缩时不要覆盖原有的文件
-q 	# 安静模式
-o 	# 直接覆盖
-a 	# 对文本文件进行必要的字符转换
-j 	# 不处理压缩文件中原有的目录路径
-C 	# 压缩文件中的文件名称区分大小写
-L 	# 将压缩文件中的全部文件名改为小写
-X 	# 解压缩时同时回存文件原来的UID/GID
-V 	# 保留VMS的文件版本信息
-K 	# 解压缩后还原权限
-M 	# 将输出结果送到more程序处理

1.6 zcat

zcat 来源于 “zip cat” 的缩写,见字知义

其功能是在不解压的情况下查看压缩文件内容

zcat [OPTION]... [FILE]...

-c 	# 将内容输出到标准输出,默认
-d 	# 解压缩
-l 	# 显示压缩文件(包)内的文件列表
-r 	# 在目上递归操作
-t 	# 测试压缩文件完整性

1.7 压缩率比较

[root@rocky86 0725]# compress hwdb.bin -vc > hwdb.bin.Z
[root@rocky86 0725]# gzip -kv hwdb.bin
[root@rocky86 0725]# bzip2 -kv hwdb.bin
[root@rocky86 0725]# xz -kv hwdb.bin
[root@rocky86 0725]# zip -v hwdb.zip hwdb.bin
[root@rocky86 0725]# ll hwdb.* -h -S
-r--r--r-- 1 root root 11M Jul 26 20:48 hwdb.bin
-rw-r--r-- 1 root root 2.8M Jul 26 21:40 hwdb.bin.Z
-rw-r--r-- 1 root root 2.0M Jul 26 21:41 hwdb.zip
-r--r--r-- 1 root root 2.0M Jul 26 20:48 hwdb.bin.gz
-r--r--r-- 1 root root 1.7M Jul 26 20:48 hwdb.bin.bz2
-r--r--r-- 1 root root 1.4M Jul 26 20:48 hwdb.bin.xz

2. 打包和解包

tar 即 Tape ARchive 磁带归档,可以对目录和多个文件打包成一个文件进行归档; 其本身不具备压缩功能,但可以使用参数调用相应的压缩命令进行压缩;

此命令可以保留文件属性,推荐使用;

对应的文件是 .tar 后缀

tar [OPTION...] [FILE]...
#tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG...]

-A|--catenate|--concatenate 	# 追加 tar 文件至归档
-c|--create 					# 创建一个新归档
-d|--diff|--compare 			# 找出归档和文件系统的差异
--delete 						# 从归档(非磁带!)中删除
-r|--append 					# 追加文件至归档结尾
-t|--list 						# 列出归档内容
--test-label 					# 测试归档卷标并退出
-u|--update 					# 仅追加比归档中副本更新的文件
-x|--extract|--get 				# 从归档中解出文件
-f|--file=ARCHIVE 				# 指定压缩包文件,大多数必选

# OPTIONS选项 [GnSkUWOmpsMBiajJzZhPlRvwo],这些选项要注意位置
-G|--incremental 									# 处理老式的 GNU 格式的增量备份
    -n|--seek 										# 归档可检索
-S|--sparse 										# 高效处理离散文件
-k|--keep-old-files 								# 解包时不覆盖已有的文件
-U|--unlink-first 									# 解压之前先删除文件的链接
-W|--verify 										# 在写入以后尝试校验归档
-O|--to-stdout 										# 解压文件至标准输出
--to-command=COMMAND 								# 将解压的文件通过管道传送至另一个程序
-m|--touch 											# 不要解压文件的修改时间
-p|--preserve-permissions|--same-permissions 		# 保留文件权限信息
-s|--preserve-order|--same-order 					# 成员参数按归档中的文件顺序列出
-M|--multi-volume 									# 创建/列出/解压多卷归档文件
-B|--read-full-records 								# 读取时重新分块(只对 4.2BSD 管道有效)
-i|--ignore-zeros 									# 忽略归档中的零字节块(即文件结尾)
-a|--auto-compress 									# 使用归档后缀名来决定压缩程序
-j|--bzip2 											# 使用 bzip2 压缩或解压缩
-J|--xz 											# 使用 xz 压缩或解压缩
--lzip|--lzma|--lzop 								# lzip|xz --format=lzma|lzop
-z|--gzip|--gunzip|--ungzip 						# 通过 gzip 压缩或解压缩
-Z|--compress|--uncompress 							# 通过 compress 压缩或解压缩
-h|--dereference 									# 将软链接指向的目标文件也压缩打包
--hard-dereference 									# 将硬链接指向的目标文件也压缩打包
-P|--absolute-names 								# 不要从文件名中清除引导符‘/’
-l|--check-links 									# 只输出非链接文件的信息
-R|--block-number 									# 每个信息都显示归档内的块数
-v|--verbose 										# 列出文件详细信息
-w|--interactive|--confirmation 					# 操作前手动确认
-o 													# 用老旧的 V7 tar 格式打包或解包

# 其他选项
--show-defaults 		# 显示 tar 默认选项
--exclude 				# 排除文件
-C|--directory=DIR 		# 指定目录
-T|--files-from=FILE 	# 从文件中读取要处理的文件
-X|--exclude-from=FILE 	# 从文件中读取要排除的文件
--version 				# 显示版本号
#打包并压缩
[root@rocky86 0726]# tar -zcvf etc.tar.gz /etc/
[root@rocky86 0726]# tar -jcvf etc.tar.bz2 /etc/
[root@rocky86 0726]# tar -Jcvf etc.tar.xz /etc/

#解包
[root@rocky86 0726]# tar -zxvf etc.tar.gz -C /tmp/
[root@rocky86 0726]# tar -jxvf etc.tar.bz2 -C /tmp/
[root@rocky86 0726]# tar -Jxvf etc.tar.xz -C /tmp/

3. split

split 命令可以分割一个文件为多个文件

split [OPTION]... [FILE [PREFIX]]

-b|--bytes=SIZE 		# 按大小指定分割单位
-C|--line-bytes=SIZE	# 同-b,但是在切割时将尽量维持每行的完整性
-d 						# 切割后小文件的后缀用数字表示
-l|--lines=NUMBER		# 指定行数,按多少行切一个小文件
--verbose				# 显示过程