在 Linux 上壓縮文件的 4種方法 作者:Sandra Henry-Stocker tar tar 命令不是專門的壓縮命令。它通常用于將多個文件拉入一個單個的文件中,以便容易地傳輸?shù)搅硪粋系統(tǒng),或者將文件作為一個相關(guān)的組進行備份。它也提供壓縮的功能,這就很有意義了,附加一個 z 壓縮選項能夠?qū)崿F(xiàn)壓縮文件。 當使用 z 選項為 tar 命令附加壓縮過程時,tar 使用 gzip 來進行壓縮。 就像壓縮一組文件一樣,你可以使用 tar 來壓縮單個文件,盡管這種操作與直接使用 gzip 相比沒有特別的優(yōu)勢。要使用 tar 這樣做,只需要使用 tar cfz newtarfile filename 命令來標識要壓縮的文件,就像標識一組文件一樣,像這樣: 1. $ tar cfz bigfile.tgz bigfile 2. ^ ^ 3. | | 4. +- 新的文件 +- 將被壓縮的文件 5. 6. $ ls -l bigfile* 7. -rw-rw-r-- 1 shs shs 103270400 Apr 16 16:09 bigfile 8. -rw-rw-r-- 1 shs shs 21608325 Apr 16 16:08 bigfile.tgz 注意,文件的大小顯著減少了。 如果你愿意,你可以使用 tar.gz 擴展名,這可能會使文件的特征更加明顯,但是大多數(shù)的 Linux 用戶將很可能會意識到與 tgz 的意思是一樣的 – tar 和 gz 的組合來顯示文件是一個壓縮的 tar 文件。在壓縮完成后,你將同時得到原始文件和壓縮文件。 要將很多文件收集在一起并在一個命令中壓縮出 “tar ball”,使用相同的語法,但要指定要包含的文件為一組,而不是單個文件。這里有一個示例: 1. $ tar cfz bin.tgz bin/* 2. ^ ^ 3. | +-- 將被包含的文件 4. + 新的文件 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps28.png zip zip 命令創(chuàng)建一個壓縮文件,與此同時保留原始文件的完整性。語法像使用 tar 一樣簡單,只是你必需記住,你的原始文件名稱應(yīng)該是命令行上的最后一個參數(shù)。 1. $ zip ./bigfile.zip bigfile 2. updating: bigfile (deflated 79%) 3. $ ls -l bigfile bigfile.zip 4. -rw-rw-r-- 1 shs shs 103270400 Apr 16 11:18 bigfile 5. -rw-rw-r-- 1 shs shs 21606889 Apr 16 11:19 bigfile.zip file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps29.png gzip gzip 命令非常容易使用。你只需要鍵入 gzip,緊隨其后的是你想要壓縮的文件名稱。不像上述描述的命令,gzip 將“就地”加密文件。換句話說,原始文件將被加密文件替換。 1. $ gzip bigfile 2. $ ls -l bigfile* 3. -rw-rw-r-- 1 shs shs 21606751 Apr 15 17:57 bigfile.gz file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps30.png bzip2 像使用 gzip 命令一樣,bzip2 將在你選擇的文件“就地”壓縮,不留下原始文件。 1. $ bzip bigfile 2. $ ls -l bigfile* 3. -rw-rw-r-- 1 shs shs 18115234 Apr 15 17:57 bigfile.bz2 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps31.png 對比 大多數(shù)人都聽說過“大小不是一切”。所以,讓我們比較一下文件大小以及一些當你計劃如何壓縮文件時的問題。 下面顯示的統(tǒng)計數(shù)據(jù)都與壓縮單個文件相關(guān),在上面顯示的示例中使用 bigfile。這個文件是一個大的且相當隨機的文本文件。壓縮率在一定程度上取決于文件的內(nèi)容。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps33.png 大小減縮率 當比較時,上面顯示的各種壓縮命產(chǎn)生下面的結(jié)果。百分比表示壓縮文件與原始文件的比較效果。 1. -rw-rw-r-- 1 shs shs 103270400 Apr 16 14:01 bigfile 2. ------------------------------------------------------ 3. -rw-rw-r-- 1 shs shs 18115234 Apr 16 13:59 bigfile.bz2 ~17% 4. -rw-rw-r-- 1 shs shs 21606751 Apr 16 14:00 bigfile.gz ~21% 5. -rw-rw-r-- 1 shs shs 21608322 Apr 16 13:59 bigfile.tgz ~21% 6. -rw-rw-r-- 1 shs shs 13427236 Apr 16 14:00 bigfile.xz ~13% 7. -rw-rw-r-- 1 shs shs 21606889 Apr 16 13:59 bigfile.zip ~21% xz 命令獲勝,最終只有壓縮文件 13% 的大小,但是所有這些壓縮命令都相當顯著地減少原始文件的大小。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps34.png 是否替換原始文件 bzip2、gzip 和 xz 命令都用壓縮文件替換原始文件。tar 和 zip 命令不替換。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps35.png 運行時間 xz 命令似乎比其它命令需要花費更多的時間來加密文件。對于 bigfile 來說,大概的時間是: 1. 命令 運行時間 2. tar 4.9 秒 3. zip 5.2 秒 4. bzip2 22.8 秒 5. gzip 4.8 秒 6. xz 50.4 秒 解壓縮文件很可能比壓縮時間要短得多。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps36.png 文件權(quán)限 不管你對壓縮文件設(shè)置什么權(quán)限,壓縮文件的權(quán)限將基于你的 umask 設(shè)置,但 bzip2 除外,它保留了原始文件的權(quán)限。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps37.png 與 Windows 的兼容性 zip 命令創(chuàng)建的文件可以在 Windows 系統(tǒng)以及 Linux 和其他 Unix 系統(tǒng)上使用(即解壓),而無需安裝其他工具,無論這些工具可能是可用還是不可用的。 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps38.png 解壓縮文件 解壓文件的命令與壓縮文件的命令類似。在我們運行上述壓縮命令后,這些命令用于解壓縮 bigfile: ◈ tar: tar xf bigfile.tgz◈ zip: unzip bigfile.zip◈ gzip: gunzip bigfile.gz◈ bzip2: bunzip2 bigfile.gz2◈ xz: xz -d bigfile.xz 或 unxz bigfile.xzfile:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml27808\wps39.png 自己運行壓縮對比 如果你想自己運行一些測試,抓取一個大的且可以替換的文件,并使用上面顯示的每個命令來壓縮它 —— 最好使用一個新的子目錄。你可能需要先安裝 xz,如果你想在測試中包含它的話。這個腳本可能更容易地進行壓縮,但是可能需要花費幾分鐘完成。 1. #!/bin/bash 2. 3. # 詢問用戶文件名稱 4. echo -n "filename> " 5. read filename 6. 7. # 你需要這個,因為一些命令將替換原始文件 8. cp $filename $filename-2 9. 10. # 先清理(以免先前的結(jié)果仍然可用) 11. rm $filename.* 12. 13. tar cvfz ./$filename.tgz $filename > /dev/null 14. zip $filename.zip $filename > /dev/null 15. bzip2 $filename 16. # 恢復原始文件 17. cp $filename-2 $filename 18. gzip $filename 19. # 恢復原始文件 20. cp $filename-2 $filename 21. xz $filename 22. 23. # 顯示結(jié)果 24. ls -l $filename.* 25. 26. # 替換原始文件 27. mv $filename-2 $filename |