我經常在工作中gzip目錄。我通常做的是
tar -zcvf file.tar.gz /path/to/directory
有沒有辦法在這裡指定壓縮級別?我想盡可能使用最佳壓縮,即使壓縮需要更多時間。
我經常在工作中gzip目錄。我通常做的是
tar -zcvf file.tar.gz /path/to/directory
有沒有辦法在這裡指定壓縮級別?我想盡可能使用最佳壓縮,即使壓縮需要更多時間。
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
假設你正在使用bash。通常,將GZIP環境變量設置為“-9”,並正常運行tar。
另外 - 如果你真的想要最好的壓縮,不要使用gzip。使用lzma或7z。
當使用gzip時(考慮到各種原因這是個好主意)考慮使用 pigz
程序而不是 gzip
。
而不是使用tar的gzip標誌,在tar進程之後手動gzip文件,然後你可以指定gzip程序的壓縮級別:
tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar
或者您可以使用:
tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz
gzip命令行中的-9告訴gzip使用最大可能的壓縮級別(默認為-6)。
編輯: 基於@depesz註釋的固定管道命令行。
現代版本的tar支持xz歸檔格式(GNU tar, 從1.22開始 在2009年,Busybox 從1.17.0開始 在2010年)。
它基於 LZMA2,有點像 的7-Zip 的版本 GZ。如果你需要xz支持,這可以提供更好的壓縮。
tar -Jcvf file.tar.xz /path/to/directory
我剛剛發現 這裡 (基本上是這個問題的重複,但在Unix stackexchange中)還有一個XZ_OPT = -9環境變量來控制XZ壓縮級別,類似於另一篇文章中的GZIP壓縮級別。
XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
tar cv /path/to/directory | gzip --best > file.tar.gz
這是Matrix Mole的第二個解決方案,但略有縮短:
調用tar時,選項 f
聲明輸出是一個文件。將其設置為 -
(stdout)使tar將其輸出寫入stdout,這是沒有兩者的默認行為 f
和 -
。
正如所述 gzip
手冊頁,如果沒有指定文件,gzip將從標準輸入壓縮。沒有必要 -
在裡面 gzip
呼叫。
選項 --best
(相當於 -9
)設置最高壓縮級別。
還可以使用-I指定壓縮程序。這可以包括壓縮級別選項。
tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory