Linux FAQ : 解壓縮

閱讀時間約 6 分鐘
參考 :
tar

常用參數

-c 打包檔案
-x 解開壓縮檔
-t 檢視壓縮檔的內容
-z 使用 gzip 壓縮
-v 顯示執行過程
-P 使用絕對路徑
-C:指定解打包或解壓縮的目錄,要注意的是這參數是大寫的C
-f 指定壓縮檔的檔案名稱。此參數的後面要接檔案名稱,因此要注意參數的順序 (通常是把 f 參數寫在最後一個,或是與其它參數分開使用)
  • 建立打包的 tar 檔 ( 不壓縮 ) :
tar -cvf 打包使用名稱.tar 來源檔案
  • 建立壓縮檔 ( 裡面會存有 tar 檔 ) :
tar -czvf 壓縮檔名稱.tgz 來源檔案
將 來源檔案 壓縮後,打包成一個名稱為 壓縮檔名稱.tgz 的檔案,
來源檔案 可以是多個檔案或目錄。如果有多個 來源檔案 時,
以空白字元分隔不同檔案名稱:
tar -czvf 檔案名稱.tgz 來源檔案1 來源檔案2 ... 來源檔案n
  • 檢視壓縮檔的內容:
tar -tzvf 壓縮檔名稱.tgz
  • 解開壓縮檔到目前的目錄:
tar -xzvf 壓縮檔名稱.tgz
  • 複製目錄:
tar -cvf - 來源目錄 | tar -xvf -
將 來源目錄 下的所有檔案及子目錄複製到目前的目錄,
這樣做的好處是可以保留原來的檔案屬性。

大量打包目錄或檔案

tar有一個好用的參數-T是一定要學會的:
有時候我們想要一次打包很多檔案,而且這些檔案是散落各地的,
此時就可以藉由此參數接上一個檔案列表,
tar就會依據這裡面的內容一個一個的去打包
tar -cvf demo.tar -T demo.list
而上面語法中的「demo.list」是可以自訂名稱的,
內容則是想要打包的檔案或者目錄,例如:
/home/demo/test
/home/demo/abc.txt
意思是執行完這個指令後,tar會打包「test」這個目錄以下
所有的檔案(包含子目錄),以及「abc.txt」這個檔案,
所以如果未來有很多不同的檔案或目錄要打包時,只要更新這個檔案就行了
指定解打包/解壓縮的目錄
範例三的解打包/解壓縮的位置預設都是在當前目錄下,
如果要指定某個目錄輸出的話,則要加入「C」這個參數,
例如下面指令就是將檔案解壓縮到「 /home/demo」的目錄下
tar -zxvf demo.tar.gz -C /home/demo
分割檔案
分割檔案 (範例:檔案分成最大 200M)
split -b 200M ubuntu.iso "ubuntu.iso.part"
像是 1 G 大小的檔案會產生 5 個 檔案 ( 原檔案不刪除 )
這樣就會占用 2 G ( 原檔案 + 分割後的檔案 )

使用 split 分割檔案

如果要將一個大檔案分割成許多個小檔案,可以使用 split 配合 -b 參數指定每個小檔案的大小,並指定輸出檔名的開頭名稱:
split -b 200M ubuntu.iso "ubuntu.iso.part"
預設的輸出檔案名稱會自動加上英文字母來區隔順序:
亦可以使用管線(pipe)結合其它的 Linux 指令,將資料直接分割後再儲存:
tar zcf - datafolder | split -b 200M - "datafolder.part"
如果想要將檔案依據大小均分為固定個數的檔案,可以使用 -n 參數,
並指定要分成擠的小檔案,
例如若要將 ubuntu.iso 這個檔案均分為 4 個小檔案,則執行:
split -n 4 ubuntu.iso "ubuntu.iso.part"
這樣每個分割出來的檔案其大小都會是相同的:

以行數分割檔案

split 除了以固定的檔案大小切割檔案之外,
對於文字檔也可以使用固定行數的方式來分割檔案,
這裡產生一個文字檔,然後將這個文字檔每三行儲存為一個小檔案:
ls -l / > mydata.txt
split -l 3 mydata.txt mydata.part
分割出來的檔案中,每個檔案都只有三行文字:
split 以固定行數分割檔案
如果要將文字檔案均分為大小相同的小檔案,但不想要把完整的行切斷,可以使用 -n l/N 參數,其中 N 是分割檔案數,例如:
ls -l / > mydata.txt
split -n l/3 mydata.txt mydata.part
這樣分割出來的檔案就不會有將一行資料切成兩行的問題:

使用 cat 合併檔案

使用 split 分割之後的檔案,可以使用 cat 來合併,例如:
cat datafolder.part* > datafolder.tar.gz
或是直接配合管線解壓縮:
cat datafolder.part* | tar zxvf -

檔名結尾

split 預設會使用兩個字母依序為分割的檔案名稱加上結尾,
我們可以使用 -a 參數來調整結尾的字母數,
若要以三個字母作為結尾,則執行:
split -a 3 -b 200M ubuntu.iso "ubuntu.iso.part"
split 以三個字母作為檔名結尾
如果想要使用數字的方式來作為檔名結尾,可以加上 -d 參數:
split -d -b 200M ubuntu.iso "ubuntu.iso.part"

輸出至標準輸出

有時候我們會想要將 split 的輸出導向至其他的程式,
這時候就可以使用 -n K/N 這種方式,其中 N 是要分割的檔案數目,
而 K 是要輸出至標準輸出的部份,例如:
ls -l / > mydata.txt
split -n l/2/3 mydata.txt
這樣會將檔案分為 3 等份,將第二份輸出至標準輸出,
而且分割資料時不會把行切斷。
為什麼會看到廣告
    2會員
    24內容數
    Linux 相關 指令 與 情境 分享
    留言0
    查看全部
    發表第一個留言支持創作者!
    work b的沙龍 的其他內容
    垂直加總資料 參考 : https://blog.longwin.com.tw/2009/02/bash-sum-use-awk-2009/ 若數字太大,出現 E 的符號,可以用 printf 來印
    Linux FAQ : 給予顯示文字色彩 參考 : https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
    Linux FAQ : grep 搜尋檔案內容 grep -i 不區分大小寫 grep -v 排除條件顯示 grep -l 顯示符合的檔名 grep -n 顯示條件在第幾行 grep -q 顯示 0 , 1 ( 檢查 $? , 0 is successful ) grep -x 整行完全符合才顯示
    Linux FAQ : 查看 jar 檔方式 jar 檔其實類似 zip 壓縮檔 除了可以用 zip 軟體來打開 在 Linux 可以用一些指令輔助
    Linux FAQ : ls , cp , rm Argument list too long 在使用 Linux 如大量檔案 ls 查看 cp 複製 rm 清理 可能會遇到了 Argument list too long 大約 10 萬筆以上檔案 就可能會看到此訊息
    垂直加總資料 參考 : https://blog.longwin.com.tw/2009/02/bash-sum-use-awk-2009/ 若數字太大,出現 E 的符號,可以用 printf 來印
    Linux FAQ : 給予顯示文字色彩 參考 : https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
    Linux FAQ : grep 搜尋檔案內容 grep -i 不區分大小寫 grep -v 排除條件顯示 grep -l 顯示符合的檔名 grep -n 顯示條件在第幾行 grep -q 顯示 0 , 1 ( 檢查 $? , 0 is successful ) grep -x 整行完全符合才顯示
    Linux FAQ : 查看 jar 檔方式 jar 檔其實類似 zip 壓縮檔 除了可以用 zip 軟體來打開 在 Linux 可以用一些指令輔助
    Linux FAQ : ls , cp , rm Argument list too long 在使用 Linux 如大量檔案 ls 查看 cp 複製 rm 清理 可能會遇到了 Argument list too long 大約 10 萬筆以上檔案 就可能會看到此訊息
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    如果實在找不到可用的替代軟體,或者就是要用指定的軟體不可,那麼虛擬機器可以作為在使用Linux時的一個應對方案。
    Thumbnail
    GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
    Thumbnail
    在先前的文章中說明了Linux大致上的安裝流程,整個過程只要依照畫面的指示設定,都可以安裝成功。其中可能比較困難在於硬碟空間的分配,這對於許多新手來說也是一個難點,也是這篇所要說的重點。
    Thumbnail
    情境描述 小明身為Linux系統工程師, 目前接到一個緊急任務, 需要在客戶端確保csv表的某個欄位的值不能重複, 對於軟體工程師來說只要寫個程式就能夠解決, 但客戶端並沒有相關的程式語言啊! 這時候只能夠使用現成的工具來完成,而經驗老道的我們很快就想到了解決方法, 不要急, 就讓我們一步
    Thumbnail
    當改用Linux的時候,會發現像是:Office、Photoshop、AutoCAD等......,這些平常在Windows上會用到的軟體根本就沒有Linux版本。至於為什麼沒有,很簡單,因為Linux系統常用在伺服器上、超級電腦這些專業領域用途,平時幾乎沒有人拿來做為日常使用,在加上......
    Thumbnail
    首先可以這樣寫告訴chatgpt你希望他表現得像個linux terminal 不用寫解釋,只要回覆linux terminal應該回復的東西即可
    Thumbnail
    Crontab結合CURL,常常會有一些功能或是API是需要排程定期執行的,這時可以把Crontab結合CURL一起使用就可依照排程來呼叫就不需要在手動執行了
    Thumbnail
    說明如何在Linux系統中安裝 Flutter 與 Visual Studio Code 開發環境
    最近發現MySQL用timestamp自動設定的現在時間CURRENT_TIMESTAMP,會慢八個小時,紀錄一下怎麼解的: 解決MySQL用timestamp自動設定的現在時間,會慢八個小時的問題: mysql > set global time_zone='+8:00';   // UTC+8為
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    如果實在找不到可用的替代軟體,或者就是要用指定的軟體不可,那麼虛擬機器可以作為在使用Linux時的一個應對方案。
    Thumbnail
    GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
    Thumbnail
    在先前的文章中說明了Linux大致上的安裝流程,整個過程只要依照畫面的指示設定,都可以安裝成功。其中可能比較困難在於硬碟空間的分配,這對於許多新手來說也是一個難點,也是這篇所要說的重點。
    Thumbnail
    情境描述 小明身為Linux系統工程師, 目前接到一個緊急任務, 需要在客戶端確保csv表的某個欄位的值不能重複, 對於軟體工程師來說只要寫個程式就能夠解決, 但客戶端並沒有相關的程式語言啊! 這時候只能夠使用現成的工具來完成,而經驗老道的我們很快就想到了解決方法, 不要急, 就讓我們一步
    Thumbnail
    當改用Linux的時候,會發現像是:Office、Photoshop、AutoCAD等......,這些平常在Windows上會用到的軟體根本就沒有Linux版本。至於為什麼沒有,很簡單,因為Linux系統常用在伺服器上、超級電腦這些專業領域用途,平時幾乎沒有人拿來做為日常使用,在加上......
    Thumbnail
    首先可以這樣寫告訴chatgpt你希望他表現得像個linux terminal 不用寫解釋,只要回覆linux terminal應該回復的東西即可
    Thumbnail
    Crontab結合CURL,常常會有一些功能或是API是需要排程定期執行的,這時可以把Crontab結合CURL一起使用就可依照排程來呼叫就不需要在手動執行了
    Thumbnail
    說明如何在Linux系統中安裝 Flutter 與 Visual Studio Code 開發環境
    最近發現MySQL用timestamp自動設定的現在時間CURRENT_TIMESTAMP,會慢八個小時,紀錄一下怎麼解的: 解決MySQL用timestamp自動設定的現在時間,會慢八個小時的問題: mysql > set global time_zone='+8:00';   // UTC+8為