写在前面
首先要熟悉两个不同的操作:
- 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