在 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 -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 使用者來說,都是一項非常有價值的技能。以上就是簡單的範例和介紹,希望對大家有幫助囉!
留言
你好,我正在用你寫的Mynote做主題,同時也是一個新手。 我也跟你一樣,做過很多工作。 生產工程師,QA,創新公司的技術人員,最近兩年才做程序員(半自學)。