我可以使用 gzip 压缩整个文件夹吗?

我可以使用 gzip 压缩整个文件夹吗?

我正在尝试在 unix 中压缩一个文件夹。可以使用 gzip 命令来完成吗?

答案1

不。

与 ,不同的是zipgzip它充当压缩算法仅有的

由于各种原因(其中一些原因可以追溯到磁带驱动器时代),Unix 使用名为tar归档数据的程序,然后可以使用 、 、 等压缩程序对其gzip进行bzip2压缩7zip

为了“压缩”目录,正确的命令是

tar -zcvf archive.tar.gz directory/ 

这将tar告诉

  • 使用压缩它z(gzip) 算法

  • C(创建)来自以下文件的存档directorytar默认是递归的)

  • v(详细地)列出(在 /dev/stderr 上,因此它不会影响管道命令)它添加到存档中的所有文件。

  • 并将输出存储为F(文件)命名为archive.tar.gz

tar命令提供gzip支持(通过-z标志)纯粹是为了您的方便。命令gzip/lib 是完全独立的。上面的命令实际上与

tar -cv directory | gzip > archive.tar.gz

要将存档解压并解压到当前目录中,您可以使用

tar -zxvf archive.tar.gz

该命令实际上与

gunzip < archive.tar.gz | tar -xv

tar还有很多很多其他选择和用途;我衷心建议您有时阅读它的联机帮助页。

答案2

使用该开关时,该gzip命令不会递归地将目录压缩为单个 zip 文件。-r相反,它会遍历该目录结构并将找到的每个文件压缩到一个单独的文件中。

例子

$ tree dir1/
dir1/
|-- dir11
|   |-- file11
|   |-- file12
|   `-- file13
|-- file1
|-- file2
`-- file3

现在运行gzip命令

$ gzip -r dir1

$ tree dir1/
dir1/
|-- dir11
|   |-- file11.gz
|   |-- file12.gz
|   `-- file13.gz
|-- file1.gz
|-- file2.gz
`-- file3.gz

如果您希望压缩目录结构,那么您可能需要使用该tar命令,然后压缩生成的.tar文件。

$ tar zcvf dir1.tar.gz dir1/

例子

$ tar zcvf dir1.tar.gz dir1/
dir1/
dir1/file1
dir1/file2
dir1/dir11/
dir1/dir11/file11.gz
dir1/dir11/file12.gz
dir1/dir11/file13.gz
dir1/file3

这会产生以下单个文件:

$ ls -l | grep tar
-rw-rw-r-- 1 saml saml  271 Oct  1 08:07 dir1.tar.gz

您可以确认其内容:

$ tar ztvf dir1.tar.gz 
drwxrwxr-x saml/saml         0 2013-10-01 08:05 dir1/
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file1
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file2
drwxrwxr-x saml/saml         0 2013-10-01 08:04 dir1/dir11/
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file11.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file12.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file13.gz
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file3

答案3

“我可以使用 gzip [在 Linux 上] 压缩整个文件夹吗?”问题的答案是您可以使用该zip程序代替 gzip,语法如下:

zip -r <zip file name> <folder to zip>

答案4

我建议使用pigzGZip 的并行实现

tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz

相关内容