为啥不能用 gzip、bzip、bzip2、xz 压缩目录?

Posted

技术标签:

【中文标题】为啥不能用 gzip、bzip、bzip2、xz 压缩目录?【英文标题】:Why can't a directory compressed with gzip, bzip, bzip2, xz?为什么不能用 gzip、bzip、bzip2、xz 压缩目录? 【发布时间】:2015-12-13 19:33:15 【问题描述】:

是否有任何可能的方法来压缩具有 GZip、BZip、BZip2、xz 格式的目录。我正在构建一个命令行工具(使用 bash),我需要包含这些选项。

【问题讨论】:

unix.stackexchange.com/questions/46969/… 【参考方案1】:

类似的命令

tar czf output.tar.gz yourdir/

应该可以。

c 表示tar 将创建一个存档 z 表示将压缩输出(使用 gzip) 输出文件名在f之后 最后,您可以指定任意数量的目录/文件(空格分隔)

【讨论】:

【参考方案2】:

要回答您问题的“为什么”部分,这是因为 Unix 的哲学是拥有许多可以很好地完成其工作的小工具,您可以将它们串在一起,而不是一个不做任何事情的大工具而且很难做得更好。您的示例完美地说明了这一理念,您可以从中选择多种压缩工具,并且很容易将新的压缩工具添加到您的工具箱中。归档部分,将文件目录转换为字节流,是一项不同的任务,它是它自己的工具,可以与任何这些或任何未来的压缩工具结合使用。

然后您的问题主体会询问“如何”。您使用带有 tar、cpio 或 pax 的管道。焦油是最常见的。然后,您相应地命名文件,以便文件的使用者可以从名称中分辨出它是什么。例如。以.tar.gz 结尾。像这样:

tar cf - somedirectory | gzip > somedirectory.tar.gz

tar cf - somedirectory | xz > somedirectory.tar.xz

这些将目录压缩成字节流,然后通过管道传送到压缩器。然后将压缩器的输出写入包含压缩目录内容的文件中。

解压:

gzip -dc somedirectory.tar.gz | tar xf -

这里以相反的顺序完成,首先解压缩文件并将其输出提供给 tar 以提取文件并重新创建目录结构。 - 表示将归档文件放入标准输出或从标准输入获取归档文件。

说了这么多关于拥有能很好地完成工作的小工具有多好之后,tar 的这个应用程序非常普遍,以至于它被内置到了 tar 选项中。所以你可以改为:

tar czf somedirectory.tar.gz somedirectory

tar cJf somedirectory.tar.xz somedirectory

tar 将运行 gzip 或 xz 可执行文件并通过它们自己管道传输数据。

J 是最近添加的 gnutar,所以你的 tar 可能没有它。)

【讨论】:

以上是关于为啥不能用 gzip、bzip、bzip2、xz 压缩目录?的主要内容,如果未能解决你的问题,请参考以下文章

压缩工具gzip,bzip2,xz,zip,tar

4周第4次课 压缩打包介绍 gzip bzip2 xz压缩工具

十九压缩打包介绍gzip压缩工具把bzip2压缩工具xz压缩工具

压缩打包介绍 gzip bzip2 xz压缩工具

压缩命令 gzip bzip2 xz zip

压缩打包介绍 gzip压缩工具 bzip2压缩工具 xz压缩工具