gzip本身不打包目录,仅递归压缩目录内所有普通文件为独立.gz文件,原始文件默认被删除,目录结构不变;需用-r选项,如gzip -r dir/。

gzip 本身不打包目录,它只压缩单个文件。所谓“递归压缩目录”,其实是对目录内所有普通文件(含子目录下的文件)逐个执行 gzip 压缩,生成对应 `.gz` 文件,原始文件默认被删除,目录结构保持不变。
用 -r 选项递归处理文件
这是最直接的方式。`gzip -r dir/` 会遍历 dir/ 下所有层级的普通文件(跳过目录、符号链接、设备文件等),对每个文件单独调用 gzip:
- 例如
dir/a.txt→ 变成dir/a.txt.gz -
dir/sub/b.log→ 变成dir/sub/b.log.gz - 原
dir/a.txt和dir/sub/b.log被删除 - 目录
dir/、dir/sub/本身仍存在,只是里面的内容变成了 .gz 文件
保留原始文件(避免误删)
默认行为会删源文件,若想保留,需加 -k 选项(部分 GNU gzip 版本支持):
-
gzip -rk dir/→ 生成dir/a.txt.gz,同时保留dir/a.txt - 如系统不支持
-k,可用-c配合 shell 循环实现类似效果,例如:find dir/ -type f -exec gzip -c {} \; -exec mv {}.gz {} \;(慎用,需测试)
控制压缩强度和显示过程
实际使用中常搭配其他选项提升实用性:
-
gzip -rv9 dir/:递归(-r)、显示详情(-v)、最高压缩比(-9) -
gzip -rql dir/:递归(-r)、静默(-q)、仅列出信息(-l),用于预览哪些文件会被处理 - 注意:
-r不压缩目录本身,也不会生成一个整体的 .tar.gz —— 那是tar的职责
常见误区提醒
容易混淆但关键的区别:
- ❌
gzip dir/会报错:“dir/ is a directory” —— gzip 不能直接压缩目录对象 - ❌
gzip -r dir/不等于 “把整个 dir 打包成一个 .gz 文件”,它生成的是多个独立的 .gz 文件 - ✅ 若需要单个归档压缩包(如 dir.tar.gz),应先
tar -cf dir.tar dir/,再gzip dir.tar或一步tar -czf dir.tar.gz dir/

















