在 Linux 中用來打包目錄及壓縮的指令有不少,例如 tar、gzip、bz、bz2、zip、rar 、xz、lha 等等。但人生其實已經夠複雜了,如果能越簡單越好。因此我只用 tar ˋ這種在各大 Linux 版本已經內建的套件,而且支援 gzip、bzip2 及 xz 的壓縮格式。

TAR 指令說明

TAR 是 Tape Archive 的縮寫,最早是用於把檔案存放到磁帶備份裝置中。然而,隨著技術的發展,TAR 現在主要用於建立和處理檔案的壓縮包。TAR 可以把一個或多個檔案和目錄打包成一個大的檔案,並且可以選擇是否壓縮它們以節省空間。

常用參數

常見的 TAR 指令基本上包含三個部分:主要操作符,選項和目標檔案或目錄。

參數 使用範例
-c 建立打包檔案,可搭配 -v 來觀看打包過程。
-C 目錄。打包或壓縮目錄可省略。解開打包或解壓縮用來指定放置的目錄
-v 在打包或壓縮的過程中顯示檔案。
-t 檢視已打包檔案的內容含有哪些檔案。
-x 解開已打包的檔案、或解壓縮檔案。
-z 使用 gzip 壓縮或者解壓縮,建議使用副檔名 .tar.gz 方便識別。
-j 使用 bzip2 壓縮或者解壓縮,建議使用副檔名 .tar.bz2 方便識別。
-J 使用 xz 壓縮或者解壓縮,建議使用副檔名 .tar.xz
-f 被處理的檔名。此參數使用要立即接檔名,建議單獨使用。
-p 保留備份資料的原始權限與屬性。
-P 保留絕對路徑。被打包檔案結構含有根目錄。
-N 比對日期。比此參數後面接的日期 (yyyy/mm/dd) 還要新的才會被打包。

注意事項

  • 指令參數 -c-t-x 不能同時出現在指令中。因為功能用途差異無法搭配使用。
  • 指令參數 -z-j-J 都是壓縮功能,不能同時出現在指令中,只能挑選其一使用。

bzip2 及 xz 現在很少人用了。像我一樣金魚腦,三分鐘就忘或腦容量有限的人,只記 gzip 的 -z 參數就可以了。

TAR 指令格式

tar -常用參數 -f 檔案名稱 -C 要打包的目錄

參數 -C 可省略。

TAR 使用範例

TAR 壓縮指令

例如,我要在 /home/ 目錄下打包順便壓縮 vagrant 這個目錄。

tar 壓縮指令
範例截圖: tar 壓縮指令使用過程。

tar -zcvf terryl.tar.gz vargant

含有 z 壓縮、c 打包、v 看過程檔名以及 f 指定檔案名稱共四個參數。
或根據建議,把參數 -f 獨立。

tar -zcv -f terryl.tar.gz vargant

TAR 解壓縮指令

tar -xvf sites-enabled.tar.gz -C /etc/nginx

這個例子會把我從其它主機上的 nginx 設定備份檔解壓縮至 /etc/nginx

tar -xvf sites-enabled.tar.gz

假如不指定 -C 參數,則會解壓至當前目錄。產生一個當初壓縮的目錄名。

TAR 打包不含目錄結構

原本在打包壓縮的時候,會連原始的目錄結構作打包。例打包 /home/example/directory 這個目錄,在解壓縮時,會連上層目錄 /home/example 都原封不動解壓出來,這樣有時會造成一些困擾,例如只想備份單單只有 directory 這個目錄,希望解壓出來是不含上層目錄的完整結構。

解決這個問題很容易,主要有兩個方式:

方法 (1)

tar -czvf filename.tar.gz -C /home/example/directory .

使用 -C 參數指定要打包壓縮的目錄。在最後面的句號 . 代表該目錄的 root (根目錄)

方法 (2)

cd /home/example/directory
tar -czvf ~/filename.tar.gz *

先切換工作目錄到要打包的目錄,接著使用萬用字元 * 打包目錄下所有東西。這個方法因為切換了當前工作目錄,所以不建議用在 shell script 中。

TAR 打包多個檔案

假如不需要將目錄整個打包,而是只需要打包幾個檔案,這時候可以用空白字元分隔不同的檔案名稱,例如:

tar -czvf filename.tar.gz file_1.txt file_2.txt

這個例子會將 file_1.txt file_2.txt 都打包進 filename.tar.gz 中。

當然,這裡是10個額外的使用 TAR 指令的範例,這些範例可補充至您的文章中。

創建不經過壓縮的 TAR 檔案

tar -cvf myarchive.tar /path/to/directory

僅列出 .tar.gz 檔案內容,不解壓

tar -ztvf myarchive.tar.gz

添加檔案到已存在的 tar 檔案

tar -rvf myarchive.tar newfile.txt

從 tar 檔案中提取特定檔案

tar -xvf myarchive.tar specificfile.txt

使用 TAR 壓縮為 xz 並指定壓縮級別

tar -cJvf myarchive.tar.xz --xz -9e /path/to/directory

使用 TAR 解壓 bz2 檔案到指定目錄

tar -xjvf myarchive.tar.bz2 -C /path/to/destination

使用 壓縮打包當前目錄下的所有 .txt 檔案

tar -cvf txtfiles.tar *.txt

從 tar 檔案中刪除特定檔案

首先,我們需要創建一個未經壓縮的tar檔案。然後使用 --delete 選項來刪除tar檔案中的特定檔案。

tar -cvf myarchive.tar /path/to/directory
tar --delete -f myarchive.tar filetodelete.txt

使用 TAR 時排除某些檔案或目錄

tar -czvf myarchive.tar.gz --exclude='path/to/exclude1' --exclude='path/to/exclude2' /path/to/directory

希望這些範例並幫助大家更全面地了解這個功能強大的工具。

總結

總而言之,TAR 是一個在 Linux 中管理和處理檔案壓縮包的強大工具。無論是備份、傳輸還是整理檔案,TAR 指令都能發揮其極大的作用。掌握 TAR 指令,對於每一個 Linux 使用者來說,都是一項非常有價值的技能。以上就是簡單的範例和介紹,希望對大家有幫助囉!

最後修改日期: 2023-07-03

作者

留言

你好,我正在用你寫的Mynote做主題,同時也是一個新手。 我也跟你一樣,做過很多工作。 生產工程師,QA,創新公司的技術人員,最近兩年才做程序員(半自學)。

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。