Answers:
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
假设您正在使用bash。通常,将GZIP环境变量设置为“ -9”,然后正常运行tar。
另外-如果您确实希望获得最佳压缩效果,请不要使用gzip。使用lzma或7z。
而且在使用gzip时(无论出于各种原因,这都是个好主意),请考虑使用pigz
program而不是gzip
。
GZIP_OPT
,用法应该相同。
不用在tar中使用gzip标志,而是在tar处理之后手动gzip文件,然后可以为gzip程序指定压缩级别:
tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar
或者您可以使用:
tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz
gzip命令行中的-9告诉gzip使用最大可能的压缩级别(默认值为-6)。
编辑:修复了基于@depesz注释的管道命令行。
file.tar
,因为gzip
添加了“ .gz”扩展名。
f -
?如果没有文件,则为stdin / out
现代版本的tar支持xz存档格式(GNU tar,自 2009年以来为1.22,而Busybox 自 2010年以来为1.17.0)。
它基于lzma2,有点像gz的7压缩版本。如果可以接受需要xz支持的需求,则可以提供更好的压缩效果。
tar -Jcvf file.tar.xz /path/to/directory
我刚刚在这里发现(基本上是这个问题的重复,但是在Unix stackexchange中),还有一个XZ_OPT = -9环境变量来控制XZ压缩级别,类似于另一篇文章中的GZIP。
XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
tar cv /path/to/directory | gzip --best > file.tar.gz
这是Matrix Mole的第二种解决方案,但略有缩短:
调用tar时,option f
指出输出是文件。将其设置为-
(stdout)会使tar将其输出写入到stdout中,这是默认行为,不带f
和-
。
并且如gzip
手册页所述,如果未指定文件,则gzip将根据标准输入进行压缩。有没有必要-
在gzip
呼叫。
选项--best
(等效于-9
)设置最高压缩级别。
xz
和pixz
。这是控制用于并行压缩的线程数的好方法,而无需创建中间的.tar文件。像这样tar -cv /path/to/dir | pixz -p4 > output.tpxz
top
使用200%-400 $ CPU之间的任何地方观看和查看它。