直接用-k选项即可保留源文件:gzip -k file.txt生成file.txt.gz的同时保留file.txt;-c配合重定向(如gzip -c file.txt > backup.gz)则可自定义输出名或用于管道,二者均不删除原文件。

直接用 -k(keep)选项就能保留源文件不删除。
用 -k 选项压缩,原文件自动留下
默认情况下,gzip 压缩完会删掉原始文件,只留下 .gz 文件。加 -k 就能避免这点:
-
gzip -k document.txt→ 生成document.txt.gz,同时document.txt仍存在 - 支持多个文件:
gzip -k file1.log file2.conf,所有源文件都保留 - 和 -v(显示过程)搭配更直观:
gzip -kv report.csv
用 -c 重定向输出,更灵活的保留方式
如果想自定义压缩后文件名,或把压缩结果写到别处,用 -c(stdout)配合重定向:
-
gzip -c notes.md > notes_backup.gz→notes.md不动,新压缩包另存为notes_backup.gz - 适合管道场景,比如压缩后立刻传给其他命令:
cat data.json | gzip -c > data.json.gz
注意:gzip 本身不打包目录,目录需先 tar 再 gzip
gzip 只处理单个文件。若要压缩整个目录并保留原目录,不能直接 gzip -k mydir/ —— 它只会递归压缩目录里每个文件(变成 mydir/file1.gz、mydir/file2.gz 等),目录结构还在,但没打包成一个文件。
- 真正“打包+压缩+保留原目录”,应组合 tar 和 gzip:
tar -czf archive.tar.gz mydir/ - 想保留原目录且不删任何内容,这条命令本身就不删源目录,
mydir/完整无损
常见误区提醒
-
-r(recursive)能让 gzip 递归处理目录下所有文件,但它不是打包,只是批量压缩,每个文件单独变 .gz -
-k和-c效果不同:-k生成同名 .gz 并留原文件;-c不生成文件,靠重定向控制输出位置 - 如果目标 .gz 已存在,默认会提示是否覆盖;加
-f可跳过询问,比如gzip -kf data.txt











