tar -zcvf file.tar.gz /path/to/directory
是否可以在此处指定压缩级别?即使要花费更多的时间进行压缩,我也要使用最佳压缩。
#1 楼
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
假设您正在使用bash。通常,将GZIP环境变量设置为“ -9”,然后正常运行tar。
另外-如果您确实希望获得最佳压缩效果,请不要使用gzip。使用lzma或7z。
并且使用gzip时(无论出于各种原因,这都是个好主意),请考虑使用
pigz
程序而不是gzip
。#2 楼
您可以在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注释的固定管道命令行。
评论
使用管道应通过以下方式完成:tar cvf-/ path / to / directory | gzip -9-> file.tar.gz
–user7385
2011年7月1日在18:40
第一个示例应以file.tar结尾,因为gzip添加了“ .gz”扩展名。
–bonsaiviking
13年2月4日在18:20
你为什么不跳过f-?如果没有文件,则为stdin / out
–akostadinov
2013年9月19日在18:52
除了previos评论。在“ man tar”部分中,环境:TAPE如果未指定--file,则用于归档的设备或文件。如果未设置此环境变量,请改用stdin或stdout。
– Mikl
13年9月24日在17:08
我们可以减少“ gzip -9-”->“ gzip -9”。来自“ man gzip”部分的描述:如果未指定文件,或者文件名为“-”,则标准输入将压缩为标准输出。
– Mikl
2013年9月24日17:18
#3 楼
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
评论
+1 xz远胜过bzip2和gzip。比较一下:tukaani.org/lzma/benchmarks.html
–User1
2012-12-25 15:44
权衡是速度。 XZ明显慢一些。
–贝尔
17年4月6日在23:02
没有。在压缩比,压缩/解压缩速度方面,xz -1明显优于bz2 -1〜9。 bz2是流行格式中最糟糕的格式。简而言之,如果您曾经使用过bz2,请尝试使用xz -1,就可以了。
–梦瑶
20-10-14在1:54
#4 楼
tar cv /path/to/directory | gzip --best > file.tar.gz
这是Matrix Mole的第二种解决方案,但略有缩短:
调用tar时,选项
f
指出输出是一个文件。将其设置为-
(stdout)使tar将其输出写入到stdout,这是默认行为,而没有f
和-
。 并且如
gzip
手册页所述,如果未指定文件,则gzip将根据标准输入进行压缩。在-
调用中不需要gzip
。 选项
--best
(等效于-9
)设置最高压缩级别。评论
这很漂亮。同样,如果您以root用户身份运行,则权限和所有者也会被保留。否则,您必须指定。另外,如果不太明显,“-9”是最佳压缩,“-1”是最快压缩。如果文件很多,“-1”仍然需要很长的时间;-)
– PJ Brunet
2013年12月12日4:04
这也适用于xz和pixz。这是控制用于并行压缩的线程数的好方法,而无需创建中间的.tar文件。像这样tar -cv / path / to / dir | pixz -p4> output.tpxz
– joelostblom
2015年2月12日在21:52
#5 楼
还可以使用-I指定压缩程序。这可以包括压缩级别选项。tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
评论
较旧版本的tar(例如CentOS 6和7中提供的版本)不支持在-I arg中提供参数,它们将尝试将整个内容视为要执行的程序名称,从而失败。至少从Debian Stretch的tar 1.29开始,这确实有效。
–猎豹
17年7月7日在0:30
@Cheetah哪个版本的tar?
–折纸眼
20年4月1日在14:11
@Cheetah我可以确认它不适用于CentOS 7.x中的tar v1.26,返回此错误:tar(子):gzip -9:无法执行:没有这样的文件或目录
– Saurabh P Bhandari
20-10-16在4:16
#6 楼
当然,macOS bsd衍生的tar必须有所不同:tar -czf file.tar.gz --options gzip:compression-level=9 /path/to/directory
评论
Pigz是“并行gzip”,它使用所有内核进行gzip压缩。您可以使用200%-400 $ CPU之间的任何位置观看顶部并查看它。
–Felipe Alvarez
2013年12月9日在2:01
仅供参考,对于.bz2格式,请使用:BZIP2 = -9 tar cvjf file.tar.bz2 / path / to / directory
–桃文
17 Mar 2 '17 at 2:59
现在环境变量似乎是GZIP_OPT,用法应该相同。
–Seer
17年5月5日在11:59
从Ubuntu 16.04的gzip手册页上:“在Vax / VMS上,环境变量的名称为GZIP_OPT,以避免与调用程序的符号集冲突。”对于sh,csh和MSDOS,它仍然应该只是GZIP
– Ponyboy47
18年6月2日在16:13
这是我尝试将GZIP环境变量设置为-9时得到的结果:gzip:警告:GZIP环境变量已弃用;使用别名或脚本
–patryk.beza
19-10-31在10:43