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
    美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
    Thumbnail
    Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
    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
    美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
    Thumbnail
    Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
    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為