压缩与解压
Linux系统tar、rar、7z、zip压缩解压缩命令使用
# 1.tar压缩解压缩
tar命令常见参数:
必须的参数:(3个参数不能共存)
-c :创建压缩文件c代表create。
-x :解压缩文件
-t :查看压缩包里面的文件
辅助参数:
-z :用 gzip 压缩/解压缩
-j :用 bzip2 压缩/解压缩
-v :显示压缩/解压缩的进度条
-f :使用档名(注意:f后面不要接参数,也就是说-zxfv是不对的,要写成-zxvf)
打包:tar -cvf [目标文件名].tar [原文件名/目录名]
解包:tar -xvf [原文件名].tar
实例:
解压一个文件:tar -zxvf filename.tar.bz2
(解压缩filename.tar.bz2)
创建压缩文件:tar -zcvf filename.tar.bz2 file1.txt file2.txt
(把file1.txt和file2.txt压缩成filename.tar.bz2)
———————————————————————————————
2.rar压缩解压缩
安装: sudo apt-get install rar unrar
或者可从http://www.rarsoft.com/download.htm下载 RAR for Linux 编译安装
# tar -xzpvf rarlinux-3.8.0.tar.gz
# cd rar
# make
这样就安装好了,安装之后就有了rar和unrar这两个程序,rar是压缩程序,unrar是解压程序。它们的参数选项很多,可用命令rar -help和unrar -help查看。
压缩:rar a [目标文件名].rar [原文件名/目录名]
解压:unrar e [原文件名].rar
实例:
将test.jpg和test.png压缩成一个rar包:rar a test.rar test.jpg test.png
将所有.jpg的文件压缩成一个rar包:rar a test.rar *.jpg
将文件夹test压缩成一个rar包:rar a test.rar test
将test.rar中的所有文件解压出来:unrar e test.rar
——————————————————————————————————–
3.7z压缩解压缩
参数含义:
x 代表解压缩文件,并且是按原始目录树解压
-r 表示递归解压缩所有的子文件夹
-o 是指定解压到的目录,-o后是没有空格的,直接接目录。这一点需要注意。
a 代表添加文件/文件夹到压缩包
-t 是指定压缩类型,这里定为7z,可不指定,因为7za默认压缩类型就是7z。
-r 表示递归所有的子文件夹
压缩:7z a [目标文件名].7z [原文件名/目录名]
解压:7z x [原文件名].7z
实例:
指定当前目录文件夹demo下
7za x chrysanthemum_test_images.7z -r -o./demo
将filename.7z解压到当前目录:7z x filename.7z -r -o./
将当前目录下的所有文件压缩成test.7z文件:7z a -t7z -r test.7z ./*
————————————————————————————
4.zip压缩解压缩
linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参数选项很多,可用命令zip -help和unzip -help查看,这里只做简单介绍。
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
实例:
实例:
将test.jpg和test.png压缩成一个zip包:zip test.zip test.jpg test.png
将所有.jpg的文件压缩成一个zip包:zip test.zip *.jpg
将文件夹test压缩成一个zip包:zip -r test.zip test
将test.zip中的所有文件解压出来:unzip test.zip
将/home目录下面的mydata目录压缩为mydata.zip:zip -r mydata.zip mydata? #压缩mydata目录
将/home目录下面的mydata.zip解压到mydatabak目录里面:unzip mydata.zip -d mydatabak
5、7za
2016-01-09 11:50:30
7z,全称7-Zip,是一款开源软件,目前公认压缩比例最大的压缩解压软件。
centos安装,yum -y install p7zip
或者编译安装:
wget http://nchc.dl.sourceforge.net/sourceforge/p7zip/p7zip_4.65_src_all.tar.bz2
tar -xjvf p7zip_4.65_src_all.tar.bz2
cd p7zip_4.65
make
make install
主要特征:
全新的LZMA算法,加大7z压缩比
支持格式:压缩:7z,XZ,BZIP2,GZIP,TAR,ZIP
解压:ARJ,CAB,CHM,CPIO,DEB,DMG,FAT,HFS,ISO,LZH,LZMA,MBR,MSI,NAIS,NTFS,RAR,RPM,UDF,VHD,WIM,XAR,Z
退出代码:
0 正常
1 告警,没有致命错误。例如某些文件正在被使用,没有被压缩
2 致命问题
7 命令行错误
8 没有足够内存
255 用户停止操作
使用:
然后说命令 最简单实用的
7za a /home/web.7z /home/wwwroot
将/home/wwwroot 打包压缩为 web.7z 放在home目录里面
解压缩的话
7za e src_file
command操作命令:
a 添加到压缩文件
b 基准测试,测试7z当前性能
d 从压缩文件中删除
e 从压缩文件中解压缩,但不包含目录结构(即所有各级文件都解压到一个目录里)
l 列出压缩文件的内容
t 测试压缩文件
u 更新文件到压缩文件
x 从压缩文件中解压缩,包含目录结构
可见,最常用的指令是a, l和x.
压缩a.txt和b.txt到c.7z:
7za a c.7z a.txt b.txt (命令a后的第一个为目标压缩文档名,然后是文件列表)
压缩a.txt和b.txt到/home/www/c.7z:
7za a /home/www/c.7z a.txt b.txt (目录名包含空格,用引号)
列出c.7z的内容:
7za l c.7z
解压缩c.7z到/home/www:
7za x c.7z -o/home/www” (-o表示输出目录,其与目录路径之间没有空格)
这样解压包含下级目录名,但不会在/home/www下新建一个c文件夹,如果需要,就把输出目录设为/home/www/c,这样会自动创建文件夹c。
如果要生成zip压缩包,可以直接将目标压缩包名设为c.zip,则它会自动使用zip算法压缩。
zip
格式:
1 | zip [options] 目标压缩包名称 待压缩源文件 |
常用命令:
1 | 压缩文件 |
zip更多参数:
1 | -v 显示操作详细信息 |
unzip更多参数:
1 | -v 显示操作详细信息 |
示例:
1 | ls |
gz
格式:
1 | gzip [options] 待压缩源文件 |
不用写最终的压缩文件名,会自动在后面加.gz后缀,同时删除源文件。
常用命令:
1 | 压缩1.log,同时会自动删除源文件 |
注意:gunzip与gzip -d等效,都可以解压gz文件。
更多参数:
1 | -c, --stdout 将压缩后的内容在标准输出显示出来,保留原文件 |
示例:
1 | 压缩1.log为1.log.gz,保留源文件 |
bz2
格式:
1 | bzip2 [options] 待压缩源文件 |
常用命令:
1 | 压缩1.log |
更多参数:
1 | -c, --stdout 将压缩后的内容在标准输出显示出来,保留原文件 |
tar
格式:
1 | tar [options] 目标压缩包名称 待压缩源文件 |
常用命令:
1 | 打包后,以gzip 压缩 |
常用参数说明:
1 | -c, --create: 建立压缩档案 |
这几个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的:
1 | -z, --gzip, --gunzip, --ungzip:有gzip属性的 |
最后的参数-f是必须的:
1 | -f, --file=ARCHIVE: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。 |
查看命令帮助:
1 | tar --help |
更多示例:
1 | 比较压缩包里文件与源文件变动 |
说明:不能向tar.gz和tar.bz2里追加或者更新文件:
1 | tar zrvf all.tar.gz 3.log |
分卷压、解缩
方法1:使用 split 命令(最常用)
基本语法:
1 | tar -cf - rices/ | pigz -p 32 -9 | split -b 2G - rices.tar.gz.part |
具体命令(例如分成 2GB 每卷):
1 | tar -cf - rices/ | pigz -p 32 -9 | split -b 2G - rices.tar.gz.part |
这会生成类似:
rices.tar.gz.partaarices.tar.gz.partabrices.tar.gz.partac- …
方法2:带进度显示的分卷压缩
1 | tar -cf - rices/ | pv -s $(du -sb rices/ 2>/dev/null | awk '{print $1}' || echo 1000000000) | pigz -p 32 -9 | split -b 2G - rices.tar.gz.part |
方法3:指定不同的分卷大小
分成 1GB 每卷:
1 | tar -cf - rices/ | pigz -p 32 -9 | split -b 1G - rices.tar.gz.part |
分成 500MB 每卷:
1 | tar -cf - rices/ | pigz -p 32 -9 | split -b 500M - rices.tar.gz.part |
分成 100MB 每卷:
1 | tar -cf - rices/ | pigz -p 32 -9 | split -b 100M - rices.tar.gz.part |
解压分卷文件:
方法1:合并后解压
1 | # 合并所有分卷 |
方法2:直接管道解压
1 | cat rices.tar.gz.part* | pigz -d | tar -xf - |
其他压缩格式的分卷:
使用 zstd:
1 | tar -cf - rices/ | zstd -T32 -19 | split -b 2G - rices.tar.zst.part |
使用 xz:
1 | tar -cf - rices/ | xz -T32 -9 | split -b 2G - rices.tar.xz.part |
验证分卷完整性:
1 | # 合并后验证 |




