Linux命令行下兼顾压缩率、速度控制及进度显示的大文件压缩方案咨询
Linux命令行下兼顾压缩率、速度控制及进度显示的大文件压缩方案咨询
兄弟我完全懂你这种痛点!系统本来就被大文件传输占着资源,还要压几个近1TB的文本文件,怕卡崩系统,又要能看到进度,还要有不错的压缩率,确实头疼。我给你整理几个实用的方案,都是Linux命令行下常用的,亲测好用:
首选工具:pigz(并行版gzip)
针对文本文件,pigz是gzip的并行实现,压缩率和gzip一致,但能利用多核CPU,还能灵活控制资源,完美适配你的场景:
- 核心优势:兼容gzip格式、压缩速度快、资源可控、配合工具能直观看进度
- 命令示例(单个大文件):
参数解释:pv path/to/your_large_file.txt | pigz -p2 -5 > path/to/your_large_file.txt.gzpv:管道查看器,实时显示压缩进度、传输速度和剩余时间-p2:指定pigz只用2个CPU核心(根据你的CPU总数调整,比如4核就用-p2,给硬盘传输留足资源)-5:中等压缩级别(范围-1到-9,-1最快、压缩率最低;-9压缩率最高、速度最慢),-5是压缩率和速度的黄金平衡点
- 压缩整个目录的命令:
这里tar -cf - path/to/your_text_dir | pv -s $(du -sb path/to/your_text_dir | awk '{print $1}') | pigz -p2 -5 > text_dir.tar.gzpv -s指定了目录的总大小,能让进度显示更精准
更高压缩率选择:xz
如果你能接受稍慢的速度,想要更好的压缩率,xz是绝佳选择,同样支持资源控制和进度显示:
- 命令示例:
参数解释:pv path/to/your_large_file.txt | xz --threads=2 -4 > path/to/your_large_file.txt.xz--threads=2:限制使用2个CPU核心-4:中等偏上的压缩级别,比pigz的-5压缩率更好,速度略慢
或者直接用xz自带的进度显示:
xz --verbose --progress --threads=2 -5 path/to/your_large_file.txt
备选:pbzip2(并行版bzip2)
bzip2的并行版本,压缩率介于gzip和xz之间,速度比xz快,适合对压缩率有一定要求但不想等太久的场景:
- 命令示例:
参数解释和pigz类似,pv path/to/your_large_file.txt | pbzip2 -p2 -5 > path/to/your_large_file.txt.bz2-p2控制线程数,-5平衡压缩率和速度
为什么不推荐你一开始考虑的compress?
compress是比较老旧的工具,压缩率远不如gzip/xz系列,而且不支持并行处理和灵活的资源控制,完全不适合你现在的大文件+资源紧张的场景,直接pass就好。
最后给你个小建议:因为系统还在进行大硬盘传输,除了控制CPU线程数,也可以用nice命令给压缩进程降优先级,比如:
nice -n 10 pv path/to/your_large_file.txt | pigz -p2 -5 > path/to/your_large_file.txt.gz
nice -n 10会让压缩进程的优先级降低,系统会优先处理硬盘传输的任务,进一步避免系统卡顿。
备注:内容来源于stack exchange,提问作者Bad Algorithm
相关产品推荐
相关产品推荐

