在 Linux 上壓縮文件的 5 種方法

在 Linux 系統上有不少能夠用於壓縮文件的工具,但它們的表現並不都是同樣的,也不是全部的壓縮效果都是同樣的。在這篇文章中,咱們比較其中的五個工具。html

在 Linux 上有很多用於壓縮文件的命令。最新最有效的一個方法是 xz,可是全部的方法都有節省磁盤空間和維護備份文件供之後使用的優勢。在這篇文章中,咱們將比較這些壓縮命令並指出顯著的不一樣。linux

tar

tar 命令不是專門的壓縮命令。它一般用於將多個文件拉入一個單個的文件中,以便容易地傳輸到另外一個系統,或者將文件做爲一個相關的組進行備份。它也提供壓縮的功能,這就頗有意義了,附加一個 z 壓縮選項可以實現壓縮文件。git

當使用 z 選項爲 tar 命令附加壓縮過程時,tar 使用 gzip 來進行壓縮。github

就像壓縮一組文件同樣,你可使用 tar 來壓縮單個文件,儘管這種操做與直接使用 gzip 相比沒有特別的優點。要使用 tar 這樣作,只須要使用 tar cfz newtarfile filename 命令來標識要壓縮的文件,就像標識一組文件同樣,像這樣:bash

$ 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 的意思是同樣的 – targz 的組合來顯示文件是一個壓縮的 tar 文件。在壓縮完成後,你將同時獲得原始文件和壓縮文件。測試

要將不少文件收集在一塊兒並在一個命令中壓縮出 「tar ball」,使用相同的語法,但要指定要包含的文件爲一組,而不是單個文件。這裏有一個示例:ui

$ 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 將「就地」「加密」文件。換句話說,原始文件將被「加密」文件替換。spa

$ 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% 的大小,可是全部這些壓縮命令都至關顯著地減小原始文件的大小。

是否替換原始文件

bzip2gzipxz 命令都用壓縮文件替換原始文件。tarzip 命令不替換。

運行時間

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.xzunxz 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: www.networkworld.com/article/353…

做者:Sandra Henry-Stocker 選題:lujun9972 譯者:robsean 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章
相關標籤/搜索