为什么不能用gzip,bzip,bzip2,xz压缩目录?

时间:2015-12-13 19:33:15

标签: linux compression archive

有没有办法用GZip,BZip,BZip2,xz格式压缩目录。我正在构建一个命令行工具(使用bash),我需要包含这些选项。

2 个答案:

答案 0 :(得分:1)

这样的命令
tar czf output.tar.gz yourdir/

应该有用。

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

答案 1 :(得分:1)

为了回答你问题的“为什么”部分,这是因为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以提取文件并重新创建目录结构。 -表示将存档放到stdout或从stdin获取存档。

已经说过关于使用小工具做得好多好的所有东西,tar的这个应用程序非常普遍,它被内置到tar选项中。所以你可以改为:

tar czf somedirectory.tar.gz somedirectory

tar cJf somedirectory.tar.xz somedirectory

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

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