为啥不能用 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 压缩目录?的主要内容,如果未能解决你的问题,请参考以下文章
4周第4次课 压缩打包介绍 gzip bzip2 xz压缩工具