实战

gzip file.txt             # → file.txt.gz(原文件被替换)
gunzip file.txt.gz        # → file.txt(解压后压缩文件消失)
gzip -d file.txt.gz       # 同 gunzip

保留原文件

gzip -k file.txt          # → file.txt + file.txt.gz(都在)
gunzip -k file.txt.gz     # → file.txt + file.txt.gz(都在)

不解压直接看 / 操作压缩内容

zcat file.txt.gz                # 等同 cat
zless file.log.gz                # 等同 less
zgrep "ERROR" file.log.gz        # 在压缩文件里 grep
zdiff a.gz b.gz                  # 比较
zmore file.gz                    # 等同 more

这些 z 系列命令对运维超有用——查老日志不用先解压。

压缩级别

gzip -1 file.txt          # 最快(最低压缩比)
gzip -9 file.txt          # 最慢(最高压缩比)
gzip -6 file.txt          # 默认(折中)

看压缩信息

gzip -l file.gz
# compressed   uncompressed  ratio  uncompressed_name
#      1234         5678     78.2%  file

校验

gzip -t file.txt.gz && echo OK

多文件分别压缩

gzip *.log                # 每个 .log 单独压成 .log.gz
gzip -r logs/             # 递归压缩目录里每个文件

注意 gzip 不能打包多个文件成一个——那要用 tar

跟其他工具组合

mysqldump db | gzip > db.sql.gz                # 边导边压
zcat backup.gz | mysql db                       # 边读边导入
tar czf - folder | ssh remote 'cat > backup.tar.gz'   # 边压边送

现代替代:zstd

sudo apt install zstd
zstd file.txt                                    # → file.txt.zst(更快更小)
unzstd file.txt.zst
zstdcat file.zst                                 # 不解压看

zstd 比 gzip 快得多且压缩比更好——新项目首选。

  • gzip file 会替换原文件——加 -k 保留
  • gzip 只压单文件——多文件用 tar 包了再 gzip(或直接 tar czf
  • macOS 默认 gzip 较老——某些选项不一样