在 Linux 上壓縮文件的 5 種方法
在 Linux 上有不少用於壓縮文件的命令。最新最有效的一個方法是 xz
,但是所有的方法都有節省磁碟空間和維護備份文件供以後使用的優點。在這篇文章中,我們將比較這些壓縮命令並指出顯著的不同。
tar
tar
命令不是專門的壓縮命令。它通常用於將多個文件拉入一個單個的文件中,以便容易地傳輸到另一個系統,或者將文件作為一個相關的組進行備份。它也提供壓縮的功能,這就很有意義了,附加一個 z
壓縮選項能夠實現壓縮文件。
當使用 z
選項為 tar
命令附加壓縮過程時,tar
使用 gzip
來進行壓縮。
就像壓縮一組文件一樣,你可以使用 tar
來壓縮單個文件,儘管這種操作與直接使用 gzip
相比沒有特別的優勢。要使用 tar
這樣做,只需要使用 tar cfz newtarfile filename
命令來標識要壓縮的文件,就像標識一組文件一樣,像這樣:
$ tar cfz bigfile.tgz bigfile
^ ^
| |
+- 新的文件 +- 將被壓縮的文件
$ ls -l bigfile*
-rw-rw-r-- 1 shs shs 103270400 Apr 16 16:09 bigfile
-rw-rw-r-- 1 shs shs 21608325 Apr 16 16:08 bigfile.tgz
注意,文件的大小顯著減少了。
如果你願意,你可以使用 tar.gz
擴展名,這可能會使文件的特徵更加明顯,但是大多數的 Linux 用戶將很可能會意識到與 tgz
的意思是一樣的 – tar
和 gz
的組合來顯示文件是一個壓縮的 tar 文件。在壓縮完成後,你將同時得到原始文件和壓縮文件。
要將很多文件收集在一起並在一個命令中壓縮出 「tar ball」,使用相同的語法,但要指定要包含的文件為一組,而不是單個文件。這裡有一個示例:
$ tar cfz bin.tgz bin/*
^ ^
| +-- 將被包含的文件
+ 新的文件
zip
zip
命令創建一個壓縮文件,與此同時保留原始文件的完整性。語法像使用 tar
一樣簡單,只是你必需記住,你的原始文件名稱應該是命令行上的最後一個參數。
$ zip ./bigfile.zip bigfile
updating: bigfile (deflated 79%)
$ ls -l bigfile bigfile.zip
-rw-rw-r-- 1 shs shs 103270400 Apr 16 11:18 bigfile
-rw-rw-r-- 1 shs shs 21606889 Apr 16 11:19 bigfile.zip
gzip
gzip
命令非常容易使用。你只需要鍵入 gzip
,緊隨其後的是你想要壓縮的文件名稱。不像上述描述的命令,gzip
將「就地」「加密」文件。換句話說,原始文件將被「加密」文件替換。
$ gzip bigfile
$ ls -l bigfile*
-rw-rw-r-- 1 shs shs 21606751 Apr 15 17:57 bigfile.gz
bzip2
像使用 gzip
命令一樣,bzip2
將在你選擇的文件「就地」壓縮,不留下原始文件。
$ bzip bigfile
$ ls -l bigfile*
-rw-rw-r-- 1 shs shs 18115234 Apr 15 17:57 bigfile.bz2
xz
xz
是壓縮命令團隊中的一個相對較新的成員,在壓縮文件的能力方面,它是一個領跑者。像先前的兩個命令一樣,你只需要將文件名稱提供給命令。再強調一次,原始文件被就地壓縮。
$ xz bigfile
$ ls -l bigfile*
-rw-rw-r-- 1 shs shs 13427236 Apr 15 17:30 bigfile.xz
對於大文件來說,你可能會注意到 xz
將比其它的壓縮命令花費更多的運行時間,但是壓縮的結果卻是非常令人讚歎的。
對比
大多數人都聽說過「大小不是一切」。所以,讓我們比較一下文件大小以及一些當你計劃如何壓縮文件時的問題。
下面顯示的統計數據都與壓縮單個文件相關,在上面顯示的示例中使用 bigfile
。這個文件是一個大的且相當隨機的文本文件。壓縮率在一定程度上取決於文件的內容。
大小減縮率
當比較時,上面顯示的各種壓縮命產生下面的結果。百分比表示壓縮文件與原始文件的比較效果。
-rw-rw-r-- 1 shs shs 103270400 Apr 16 14:01 bigfile
----------------------------------------------------rw-rw-r-- 1 shs shs 18115234 Apr 16 13:59 bigfile.bz2 ~17%
-rw-rw-r-- 1 shs shs 21606751 Apr 16 14:00 bigfile.gz ~21%
-rw-rw-r-- 1 shs shs 21608322 Apr 16 13:59 bigfile.tgz ~21%
-rw-rw-r-- 1 shs shs 13427236 Apr 16 14:00 bigfile.xz ~13%
-rw-rw-r-- 1 shs shs 21606889 Apr 16 13:59 bigfile.zip ~21%
xz
命令獲勝,最終只有壓縮文件 13% 的大小,但是所有這些壓縮命令都相當顯著地減少原始文件的大小。
是否替換原始文件
bzip2
、gzip
和 xz
命令都用壓縮文件替換原始文件。tar
和 zip
命令不替換。
運行時間
xz
命令似乎比其它命令需要花費更多的時間來「加密」文件。對於 bigfile
來說,大概的時間是:
命令 運行時間
tar 4.9 秒
zip 5.2 秒
bzip2 22.8 秒
gzip 4.8 秒
xz 50.4 秒
解壓縮文件很可能比壓縮時間要短得多。
文件許可權
不管你對壓縮文件設置什麼許可權,壓縮文件的許可權將基於你的 umask
設置,但 bzip2
除外,它保留了原始文件的許可權。
與 Windows 的兼容性
zip
命令創建的文件可以在 Windows 系統以及 Linux 和其他 Unix 系統上使用(即解壓),而無需安裝其他工具,無論這些工具可能是可用還是不可用的。
解壓縮文件
解壓文件的命令與壓縮文件的命令類似。在我們運行上述壓縮命令後,這些命令用於解壓縮 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.xz
自己運行壓縮對比
如果你想自己運行一些測試,抓取一個大的且可以替換的文件,並使用上面顯示的每個命令來壓縮它 —— 最好使用一個新的子目錄。你可能需要先安裝 xz
,如果你想在測試中包含它的話。這個腳本可能更容易地進行壓縮,但是可能需要花費幾分鐘完成。
#!/bin/bash
# 詢問用戶文件名稱
echo -n "filename> "
read filename
# 你需要這個,因為一些命令將替換原始文件
cp $filename $filename-2
# 先清理(以免先前的結果仍然可用)
rm $filename.*
tar cvfz ./$filename.tgz $filename > /dev/null
zip $filename.zip $filename > /dev/null
bzip2 $filename
# 恢復原始文件
cp $filename-2 $filename
gzip $filename
# 恢復原始文件
cp $filename-2 $filename
xz $filename
# 顯示結果
ls -l $filename.*
# 替換原始文件
mv $filename-2 $filename
via: https://www.networkworld.com/article/3538471/how-to-compress-files-on-linux-5-ways.html
作者:Sandra Henry-Stocker 選題:lujun9972 譯者:robsean 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive