请帮助压缩、gz、tar……一个普通文本文件,并建议使用一个可以减小尺寸的文件。
答案1
压缩程序
包括一些经典但现已过时的命令,纯压缩实用程序包括:
- 打包(解包、pcat)- 扩展名 .z
- 压缩(解压缩)- 扩展名 .Z
- gzip(gunzip、gzcat 等)——扩展名 .gz
- bzip2 (bunzip2、bzcat、...) - 扩展名 .bz2
- xz (unxz、xzcat、...) - 扩展名 .xz
档案管理员
另外,还有归档程序 - 将多个文件收集到单个输出中的程序(可能是磁带文件,但通常不再是)。这些包括:
- ar - 档案
- tar——磁带存档
- cpio——Unix 系统 III 归档程序
- pax - cpio 和 tar 的 POSIX 混合体
然后是源自 Windows 的混合程序:
- zip——归档并压缩
如今,GNU Tar 可以处理压缩和归档,因此它通常是归档的首选工具。
比较压缩程序
我按照出现的顺序列出了压缩器,这也是效率递增的顺序。原始的 pack 按照现代标准来说相当弱;compress 的压缩率比 pack 高出不少。但是,gzip 的压缩率比 compress 高出不少,而且在相当长的一段时间内,它几乎一直被使用,因为它已经达到了最佳状态。它是许多软件档案中使用的标准压缩 - 例如,CPAN(综合 Perl 档案网络)使用 gzip 压缩的 tar 文件,直到最近 GNU 也是如此,但现在它们有时也提供 xz 或 bzip2 文件。Bzip2 的压缩率比 gzip 高 - 新的压缩器必须更好才能被接受,并且对它的直接支持已内置在最新版本的 GNU Tar 中。最后,xz 是一个相对较新的进入者(可能是最近 2-3 年),但它的压缩率比其他所有压缩器都高。
Zip 的压缩程度与 gzip 或 bzip2 大致相同;它是一种相当不错的压缩方式,但它起源于 Windows,并且是 Windows 的标准。但是,您可以获得适用于 Unix 的 zip 和 unzip(就像您可以获得适用于 Windows 的其他程序一样)。因此,zip 文件往往表明它适用于 Windows。
pack 和 compress 功能都已过时 - 但 gzip 仍可识别它们并对其进行解压缩。它们的存在解释了“z”符号的由来,以及为什么不使用普通的“z”。
档案管理员
太平洋保险协会
在某些方面,cpio 程序优于 tar 格式磁带(事实上,tar 有多种格式,但您不太可能需要担心这些细节)。最显著的区别是 cpio 从标准输入读取要备份的文件的名称 - 每行一个名称。这使得在备份目录时可以有选择性。相比之下,tar 被赋予目录名称并备份其下的所有内容(除非它是 GNU Tar 并被告知要排除某些内容)。您还可以在“pass”模式下使用 cpio(cpio -p)将材料从一个地方复制到另一个地方。但是,GNU Tar 已经包含了从文件读取文件的功能,并且更易于使用且更广泛可用。
cpio 的另一个优点是它使用可变长度的文件头,而 tar 使用固定长度的文件头。如今,当所有内容都被压缩时,tar 头中的浪费空间不再是问题 - 它最终最多占用磁盘上的几个字节。cpio 格式的一个缺点是它有两种 - 二进制格式是特定于平台的。只要您始终使用可移植字符格式,就不会有问题。
现在,您可能永远不会使用 cpio,但如果您熟悉它,它的直通模式仍然很有用。
find . -name '*.[ch]' -print |
cpio -pdmB /some/where/else
GNU Tar 中的等效项是:
find . -name '*.ch' -print |
tar -cf - -T - |
tar -xf - -C /some/where/else
帕克斯
最初的 POSIX 标准 (1988 年) 是在 tar 与 cpio 之争期间制定的,pax 是 POSIX 存档格式和程序,是一种折衷方案。然而,它从未被广泛使用 - 它因不是 tar 或 cpio 而受苦。它旨在为交战阵营带来和平;但它没有成功。
GNU Tar 支持各种 pax 格式(两个版本)。
GNU Tar
GNU Tar 允许您指定创建档案时使用的压缩算法,并在从档案中提取时自动检测(已知)格式。因此:
tar -czf /tmp/wotnot.tar.gz some-sub-directory
cd /some/other/place
tar -xf /tmp/wotnot.tar.gz
这使用 gzip 压缩。扩展名 .tgz 也用于表示经过 gzip 压缩的 tar 文件:
tar -czf /tmp/wotnot.tgz some-sub-directory
cd /some/other/place
tar -xf /tmp/wotnot.tgz
如果您对 .tgz 文件使用 gunzip,您将得到一个残留的 .tar 文件;但是,如果您随后对文件进行 gzip 压缩,您将得到一个 .tar.gz 文件。
要使用 bzip2 压缩:
tar -cjf /tmp/wotnot.tar.bz2 some-sub-directory
cd /some/other/place
tar -xf /tmp/wotnot.tar.bz2
要使用 xz 压缩:
tar -cf /tmp/wotnot.tar.xz --use-compress-program=xz some-sub-directory
cd /some/other/place
tar -xf /tmp/wotnot.tar.xz --use-compress-program=xz
据我所知,没有 GNU Tar 选项可以自动执行此操作(xz 压缩)。(“-j”选项是 GNU Tar 的一个相对较新的附加选项。)您可以通过“ --use-compress-program
”选项指定任何压缩程序,只要它遵循与 gzip、bzip2 相同的通用接口 - 并且 xz 确实遵循它。对于假设的压缩程序“zipper”:
zipper -c -- compresses standard input to standard output
zipper -d -- decompresses
zipper -c -d -- decompresses standard input to standard output
GNU Tar 的一个怪癖:原始 tar 程序是在 Unix 的早期编写的,当时“-option”符号尚未标准化。因此,tar 第一个选项前面的破折号至今仍是可选的。您会看到人们使用“ ”tar cvf /tmp/tarfile .
或不带破折号的等效符号。
使用哪个命令?
这取决于你的目标受众。Windows 用户喜欢 zip。针对 Windows 的资料应使用这种格式。
主要使用 Unix 及其衍生产品的人不喜欢 zip:改用 GNU Tar。要获得最广泛、最可靠的压缩,请使用 gzip。如果您的受众大多是最新的,请考虑改用 bzip2。如果您可以指示他们,请使用 xz,因为它可以大大减少文件大小 - 比其他任何方法都好。
如果您提供文件供其他人下载,提供几种格式是一种礼貌;人们可以选择他们喜欢的格式。
为了简单地压缩单个文件,我会使用 xz 或 bzip2。