多线程压缩解压缩神器 pigz 使用方法总结

 

写在前面

首先要熟悉两个不同的操作:

  • tar: 用于打包, 打包前后的文件大小不会有区别, 仅仅是将多个小文件打包了, 最后的结果是.tar文件
  • zip: 压缩格式, 可以由tar命令指定压缩格式, 会执行压缩, 但是单线程执行会导致效率比较低, 最后的结果是 .zip或者.tar.gz

可以做个实验对比一下, 这里先生成一些小的文件, 通过 Shell 来做:

#!/bin/bash
dir=./files
tar_file=only_tar.tar
targz_file=with_gzip.tar.gz

# generate files for test
if [ ! -d ${dir} ]; then
	mkdir ${dir}
	for i in {1..500}; do
		for j in {1..100}; do
			echo $j >>${dir}/target${i}.txt
		done
	done
fi

echo $(du -sh $dir)

if [ ! -f ${tar_file} ]; then
	echo "generate tar:"
	tar cvf ${tar_file} $dir &>/dev/null
fi
echo $(du -sh ${tar_file})

if [ ! -f ${targz_file} ]; then
	echo "generate tar.gz:"
	tar zcvf ${targz_file} $dir &>/dev/null
fi
echo $(du -sh ${targz_file})

结果:

2.0M ./files generate tar: 504K only_tar.tar generate tar.gz: 8.0K with_gzip.tar.gz

说明 tar 仅执行了打包操作, 并且也做了相应的数据对齐等调整, 但是并未压缩.

pigz 简介

安装

brew install pigz
==> pigz --version
pigz 2.8

基本信息

==> pigz -l with_gzip.tar.gz
compressed   original reduced  name
      6659     513536   98.7%  with_gzip.tar

常见选项

  • -k: 保留原始文件
  • -d: 解压

多线程压缩

- Compress a directory using tar:
    tar cf - path/to/directory | pigz > path/to/file.tar.gz

测试一下:

==> tar cf - files | pigz > with_pigz.tar.gz
==> ll
-rw-r--r--    1 xxx  staff   6.5K 10 13 21:03 with_pigz.tar.gz

多线程解压

仅解压为 tar 格式, 还需要执行tar xvf xx.tar 完成最后的解压

pigz -kd xx.tar.gz