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
2
zip [options] 目标压缩包名称 待压缩源文件
unzip [-Z] [options] 待压缩源文件 [list] [-x xlist] [-d exdir]

常用命令:

1
2
3
4
5
6
7
8
9
10
11
# 压缩文件
zip myfile.zip myfile

# 压缩文件夹(包含子目录)
zip -r mydir.zip mydir

# 压缩当前目录所有文件
zip mydir.zip *

# 解压文件
unzip mydir.zip

zip更多参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-v 显示操作详细信息

-d 从压缩包里删除文件
-m 将文件剪切到压缩包里,源文件将被删除
-r 递归压缩

-x 排除文件

-c 加一行备注
-z 加备注

-T 测试压缩包完整性
-e 加密

-q 安静模式

-1, --fast 更快的压缩速度
-9, --best 更好的压缩率

--help 查看帮助
-h2 查看更多帮助

unzip更多参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
-v 显示操作详细信息

-l 查看压缩包内容
-d 解压到指定文件夹
-x 排除压缩包内文件

-t 测试压缩包文件内容
-z 查看备注

-o 覆盖文件无需提示
-q 安静模式

--help 查看帮助

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
$ ls
t.md t.php t.php.zip

# 创建压缩包
$ zip -v myfile.zip t.*
adding: t.md (in=8121) (out=1051) (deflated 87%)
adding: t.php (in=740) (out=319) (deflated 57%)
adding: t.php.zip (in=1666) (out=1666) (stored 0%)
total bytes=10527, compressed=3036 -> 71% savings

# 测试压缩包完整性
$ zip -T myfile.zip
test of myfile.zip OK

# 测试压缩包文件内容
$ unzip -t myfile.zip
Archive: myfile.zip
testing: t.md OK
testing: t.php OK
testing: t.php.zip OK
No errors detected in compressed data of myfile.zip.

# 查看压缩包里内容
$ unzip -l myfile.zip
Archive: myfile.zip
Length Date Time Name
--------- ---------- ----- ----
8121 06-08-2016 17:03 t.md
740 06-08-2016 17:02 t.php
1666 07-30-2016 17:38 t.php.zip
--------- -------
10527 3 files

# 从压缩包里删除文件t.php.zip
$ zip -d myfile.zip t.php.zip
deleting: t.php.zip

# 从压缩包里删除文件t.php
$ zip -d myfile.zip t.php
deleting: t.php

# 添加文件到压缩包里
$ zip -u myfile.zip t.php
adding: t.php (deflated 57%)

# 给压缩包添加注释
$ zip -z myfile.zip
enter new zip file comment (end with .):
test
.

# 查看压缩包注释
$ unzip -z myfile.zip
Archive: myfile.zip
test

# 解压到指定文件夹
$ unzip myfile.zip -d my
Archive: myfile.zip
test .
inflating: my/t.md
inflating: my/t.php

# 排除文件不解压
$ unzip myfile.zip -x t.php -d my
Archive: myfile.zip
test .
inflating: my/t.md

gz

格式:

1
2
gzip [options] 待压缩源文件
gunzip [options] 待解压文件

不用写最终的压缩文件名,会自动在后面加.gz后缀,同时删除源文件。

常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 压缩1.log,同时会自动删除源文件
gzip 1.log

# 解压1.log.gz,同时会自动删除压缩包
gzip -d 1.log.gz

# 压缩1.log,保留源文件
gzip -k 1.log

# 解压1.log.gz,保留压缩包
gzip -dk 1.log.gz


# 查看压缩包信息
gzip -l 1.log.gz

# 递归的对目录里的每个文件单独压缩
gzip -r mydir

注意:gunzip与gzip -d等效,都可以解压gz文件。

更多参数:

1
2
3
4
-c, --stdout 将压缩后的内容在标准输出显示出来,保留原文件

-1, --fast 更快的压缩速度
-9, --best 更好的压缩率

示例:

1
2
# 压缩1.log为1.log.gz,保留源文件
gzip -c 1.log > 1.log.gz

bz2

格式:

1
2
bzip2 [options] 待压缩源文件
bunzip2 [options] 待解压文件

常用命令:

1
2
3
4
5
6
7
8
9
# 压缩1.log
bzip2 1.log
bzip2 -k 1.log

# 解压1.log.bz2
bzip2 -d 1.log.bz2
bzip2 -dk 1.log.bz2
bunzip2 1.log.bz2
bunzip2 -k 1.log.bz2

更多参数:

1
2
3
4
-c, --stdout 将压缩后的内容在标准输出显示出来,保留原文件

-1, --fast 更快的压缩速度
-9, --best 更好的压缩率

tar

格式:

1
tar [options] 目标压缩包名称 待压缩源文件

常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 打包后,以gzip 压缩
tar zcvf test.tar.gz /test #压缩/test为test.tar.gz

# 解压test.tar.gz
tar zxvf test.tar.gz

# 打包后,以bzip2 压缩
tar jcvf test.tar.bz2 /test #压缩/test为test.tar.bz2

# 解压test.tar.bz2
tar jxvf test.tar.bz2

# 仅打包,不压缩
tar cvf test.tar /test #压缩/test为test.tar

# 解压test.tar
tar xvf test.tar

# 查看压缩包内容列表
tar tvf test.tar.gz

# 解压到指定文件夹(目标文件夹必须存在)
$ tar -zxvf all.tar.gz -C my/

# 压缩时排除某些目录
$ tar -zcvf tomcat.tar.gz --exclude=tomcat/logs tomcat
$ tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs --exclude=tomcat/xiaoshan.txt tomcat

常用参数说明:

1
2
3
4
5
6
7
-c, --create: 建立压缩档案
-x, --extract, --get:解压
-t, --list:查看内容
-r, --append:向压缩归档文件末尾追加文件
-u, --update:更新原压缩包中的文件
-d, --diff, --compare 将压缩包里的文件与文件系统进行对比
--delete 从压缩包里删除

这几个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的:

1
2
3
4
5
6
7
-z, --gzip, --gunzip, --ungzip:有gzip属性的
-j, --bzip2:有bz2属性的
-Z, --compress, --uncompress:有compress属性的
-v, --verbose:显示所有过程
-O, --to-stdout:将文件解开到标准输出

-C, --directory=DIR:解压到指定文件夹

最后的参数-f是必须的:

1
-f, --file=ARCHIVE: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

查看命令帮助:

1
2
3
tar --help
tar -?
tar --usage

更多示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 比较压缩包里文件与源文件变动
$ tar --diff -vf 1.log.tar 1.log
1.log
1.log: Mod time differs
1.log: Size differs

# 删除压缩包里的1.log
$ tar --delete -vf 1.log.tar 1.log

# 向压缩归档文件里追加文件
$ tar rvf 1.log.tar 1.log 2.log
1.log
2.log

# 向压缩归档文件里更新文件
$ tar uvf 1.log.tar 1.log 2.log

说明:不能向tar.gz和tar.bz2里追加或者更新文件:

1
2
3
$ tar zrvf all.tar.gz 3.log
tar: Cannot update compressed archives
Try 'tar --help' or 'tar --usage' for more information.

分卷压、解缩

方法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.partaa
  • rices.tar.gz.partab
  • rices.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
3
4
5
# 合并所有分卷
cat rices.tar.gz.part* > rices.tar.gz

# 解压
tar -xzf rices.tar.gz

方法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
2
3
4
5
# 合并后验证
cat rices.tar.gz.part* | pigz -t

# 或者解压测试
cat rices.tar.gz.part* | pigz -d | tar -tf - > /dev/null