有没有办法用GZip,BZip,BZip2,xz格式压缩目录。我正在构建一个命令行工具(使用bash),我需要包含这些选项。
答案 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,所以你的焦油可能没有它。)