更新於 2022/05/31閱讀時間約 6 分鐘

Linux FAQ : 解壓縮

    參考 :
    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 等份,將第二份輸出至標準輸出,
    而且分割資料時不會把行切斷。
    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.