Linux常用命令-gzip

命令

gzip

描述

compress or expand files
gzip压缩工具

用法

1
gzip [OPTION]... [FILE]...

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Options:
-c, --stdout 显示到标准输出
-d, --decompress 解压缩
-f, --force 强制覆盖输出文件
-l, --list 显示压缩包信息
-n, --no-name 不要保存或还原原始名称和时间戳
-N, --name 保存或还原原始名称和时间戳
-q, --quiet 静默模式
-r, --recursive 递归处理子目录,即单独压缩子目录下的每个文件
-S, --suffix=SUF 指定压缩文件后缀
-t, --test 测试压缩文件的完整性
-v, --verbose 显示详情
-1, --fast 快速压缩,最低压缩级别,共分1-9个级别
-9, --best 最高压缩级别,压缩速度较慢,压缩后的文件较小

注意

注意gzip压缩后会删除原文件
gzip -r支持批量压缩目录下的文件,可用于批量压缩日志文件,gunzip -r批量解压缩
如果单独使用gzip或gunzip命令,建议增加-N选项,避免更改原有文件名和时间戳

示例

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
69
70
71
72
73
74
75
76
$ gzip -V
gzip 1.5

$ ls
a1 a2 a.tar.gz b1 b2 b.tar.gz
# 默认单独压缩每个文件,并删除原文件
$ gzip a1 a2
$ ls
a1.gz a2.gz a.tar.gz b1 b2 b.tar.gz
# -d 解压缩,也可以直接使用gunzip命令
$ gzip -d a1.gz a2.gz
$ gunzip a1.gz a2.gz
$ ls
a1 a2 a.tar.gz b1 b2 b.tar.gz
# -l 显示压缩文件信息,压缩后的大小,压缩前的大小,压缩率,压缩前的文件名
$ gzip -l a2.gz
compressed uncompressed ratio uncompressed_name
27 4 -50.0% a2
$ gzip -l a.tar.gz
compressed uncompressed ratio uncompressed_name
135 10240 98.9% a.tar
# 注意复制一个gz压缩包后,会同时更改文件名,如下的a2和a3
$ cp a2.gz a3.gz
$ gzip -l a2.gz a3.gz
compressed uncompressed ratio uncompressed_name
27 4 -50.0% a2
27 4 -50.0% a3
$ gzip -dn a3.gz
$ ls
a1 a2.gz a3 a.tar.gz b1 b2 b.tar.gz
$ rm a3
rm: remove regular file ‘a3’? y
$ cp a2.gz a3.gz
$ gzip -dN a3.gz
$ ls
a1 a2 a2.gz a.tar.gz b1 b2 b.tar.gz

# 批量递归压缩目录下的文件
$ ll dir1/
total 8
-rw-r--r-- 1 root root 3 Oct 20 21:15 b1
-rw-r--r-- 1 root root 4 Oct 20 21:16 b2
drwxr-xr-x 2 root root 26 Oct 20 21:35 d1/
$ ll dir1/d1
total 8
-rw-r--r-- 1 root root 3 Oct 20 21:15 a1
-rw-r--r-- 1 root root 4 Oct 20 21:15 a2
# 默认不支持压缩目录
$ gzip dir1/
gzip: dir1/ is a directory -- ignored
$ ll dir1/
total 8
-rw-r--r-- 1 root root 3 Oct 20 21:15 b1
-rw-r--r-- 1 root root 4 Oct 20 21:16 b2
drwxr-xr-x 2 root root 26 Oct 20 21:35 d1/
# -r 单独压缩目录下的所有文件
$ gzip -r dir1/
$ ll dir1/
total 8
-rw-r--r-- 1 root root 26 Oct 20 21:15 b1.gz
-rw-r--r-- 1 root root 27 Oct 20 21:16 b2.gz
drwxr-xr-x 2 root root 32 Oct 20 21:37 d1/
$ ll dir1/d1/
total 8
-rw-r--r-- 1 root root 26 Oct 20 21:15 a1.gz
-rw-r--r-- 1 root root 27 Oct 20 21:15 a2.gz
# 批量解压缩
$ gunzip -r dir1/
# -S 指定压缩文件后缀,建议保留.gz的文件后缀,可以适当更改压缩文件名,注意为了不改变原有文件名,解压的时候需要加-N选项
$ gzip a1
$ gzip -S -$(date +%F-%j).gz a2
$ ls
a1.gz a2-2021-10-20-293.gz
$ gunzip -N a2-2021-10-20-293.gz
$ ls
a1.gz a2