UNIX 中的文件压缩和解压缩

UNIX 中的文件压缩和解压缩

请帮助压缩、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。

答案2

压缩压缩(gz)和柏油都可以压缩文件,但是存在差异。

zip可以压缩多个文件并将它们放在一个.zip文件中,而原始文件保持不变。
gzip另一方面,为.gz每个文件创建一个文件并替换原始文件,同时保持权限/所有权不变。
tar只是一个文件打包器。它接受输入并创建一个.tar包含所有保留目录结构和权限的文件。后来他们添加了压缩,通常-z使用选项(即 gzip)

如果没有什么令人信服的理由,我建议你使用 zip。大多数(所有?)操作系统都支持它。

相关内容