我可以使用 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

相關內容