我正在尝试在 unix 中压缩一个文件夹。可以使用 gzip 命令来完成吗?
答案1
不。
与 ,不同的是zip
,gzip
它充当压缩算法仅有的。
由于各种原因(其中一些原因可以追溯到磁带驱动器时代),Unix 使用名为tar
归档数据的程序,然后可以使用 、 、 等压缩程序对其gzip
进行bzip2
压缩7zip
。
为了“压缩”目录,正确的命令是
tar -zcvf archive.tar.gz directory/
这将tar
告诉
使用压缩它z(gzip) 算法
C(创建)来自以下文件的存档
directory
(tar
默认是递归的)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
我建议使用pigz
(GZip 的并行实现)
tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz