linux 指令範例: tar & gz
tar是 Unix 和類 Unix 系統上常用的壓縮工具,名字來自於 tape archive 的縮寫, tar 可以將多個文件或目錄打包成一個檔案。單純 .tar 檔案是沒有壓縮資料的,只是把好多目錄與資料夾打包起來變成一個大檔案而已;如果要有壓縮資料的功能,要使用 .tar.gz 壓縮檔案,是最常見的壓縮檔案格式。
在 Linux 之中如果需要將一堆檔案壓縮或打包成單一個檔案時,使用的並不是我們在Windows下常用的 .zip、.rar、7z 這種壓縮格式。在網路上下載的大多數 Linux 資源不外乎都是使用 .tar.gz 這個格式來壓縮打包的
基礎指令
使用 gzip 壓縮算法進行壓縮和解壓縮操作。
# 將一個 folder 內,全部文件夾打包成 tar.gz 格式的壓縮檔
tar -czvpf archive.tar.gz .
.
,代表該目錄下所有 files 和 folders,都會被打包
# 解壓縮 .tar.gz 格式的壓縮檔
tar -xzvpf archive.tar.gz
解壓縮時,注意解壓縮的位置和權限,以確保解壓縮後的檔案可以正確地使用。
其中命令參數 :
- -c : 打包檔案
- -x : 解開壓縮檔
- -z : 啟用gzip壓縮
- -v : 啟用顯示詳細輸出
- -p:表示保留文件的權限和屬性信息。
- -f : 要創建的壓縮文件的名稱
如果使用 tar 工具解壓縮文件時,發現在解壓縮後的目錄下出現了,.DS_Store 等等以 . 開頭的文件。這是因為使用了 Mac OS X 的 tar 命令,並且該命令會創建一些隱藏的系統文件。
在 Mac OS X 中,文件系統使用了一些額外的文件屬性,這些屬性通常被存儲在名為 .DS_Store 的隱藏文件中。故使用 Mac OS X 的 tar 命令壓縮文件時,會包含這些隱藏文件。要避免這個問題,可以使用 --exclude
選項來排除 :
tar -czvf archive.tar.gz --exclude='.DS_Store' .
# 支持正規表達式
tar -czvf archive.tar.gz --exclude='._*' .
範例
# 做個新的 folder,其名稱和 .tar.gz 文件前綴名稱一樣
name=$(basename archive.tar.gz .tar.gz)
mkdir $name
# 解壓縮檔,到指定的 folder
tar -zxvpf archive.tar.gz -C $name
# 做一個 folder name list
folders=($(find $name -type d | awk -F/ '{print $NF}'))
for folder in "${folders[@]}"
do
echo $folder
done