我正在嘗試在 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