歡迎您光臨本站 註冊首頁

Linux Deepin同時解壓多個taball壓縮檔案

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

如何在 Linux Deepin 的命令行上同時解壓多個 tarball 文件?在介紹之前,我們先來舉一個例子.假設我們在當前目錄下有如下幾個壓縮檔案:

$ ls

backup1.tar backup2.tar backup3.tar

我們需要一起把它們全部解壓,該如何做呢?

我們先來簡要講解一下 tar 的用法.tar 命令原用於從磁帶設備讀寫文件(tar 即是 Tape ARchiver 的縮略).我們只能指定要放入壓縮檔案或要解壓出的文件名(如 tar x myfineonthe.tape).可以使用 -f 選項可以告訴 tar 該檔案不是在某個磁帶上而是在文件中.該選項只接受一個參數——壓縮檔案的文件名.所有其它(後面的)參數都被看作上面提到的壓縮文件的一部分.

tar -x -f backup.tar myfile.txt

# 或者使用下面更常見的句法

tar xf backup.tar myfile.txt

現在回到我們之前的問題上來:同時解壓當前目錄下面的 backup1.tar backup2.tar backup3.tar 三個文件.可能會有朋友要使用 tar xf *.tar,我們來看看其執行結果:

$ tar xf *.tar

tar: backup2.tar: Not found in archive

tar: backup3.tar: Not found in archive

tar: Exiting with failure status due to previous errors

這是怎麼回事?Shell 通過匹配文件名將 *.tar 替換,上面的一行實際等同於:

tar xf backup1.tar backup2.tar backup3.tar

從我們之前對於 tar 的用法解釋中可知,我們在這裡使用的命令的含義為「從壓縮檔案 backup1.tar 中解壓出 backup2.tar 和 backup3.tar」.只有在 backup1.tar 這個壓縮檔案中有相應的文件名,才能執行成功.

解決辦法很簡單:從壓縮檔案中將文件一一解壓即可.因為我們使用的是一個 UNIX shell (Bash),可以用循環來實現:

for tarname in *.tar; do

tar xf "$tarname"

done

下面說一下循環和 for-循環兩個基本概念.循環是用來在滿足某個條件之前重複其內部的代碼的一種結構.滿足該條件時循環即停止,其外部的代碼會繼續執行.for-循環是將一變數逐次設置為一個列表中的各個值,並重複直到該列表用完的一類循環結構.

在這裡,for-循環會將匹配 *.tar 的文件名作為參數反覆調用執行 tar xf.這樣我們就將壓縮檔案逐一「自動地」解壓出來.

還有另一種很常見的檔案格式是 ZIP.解壓 ZIP 文件的命令是 unzip.這裡也有同樣的問題:unzip 只接受一個選項來指定 ZIP 文件.可以用同樣的方法來解決:

for zipfile in *.zip; do

unzip "$zipfile"

done

對於 unzip 命令還有另一種做法:它可以讀入類似 shell 的樣式(pattern)來指定 ZIP 文件名.為防止 shell 對於這些樣式的解釋,需要使用引號.unzip(而非 shell)在這裡會解釋 *.zip:

unzip "*.zip"

# 還可以用下面這種看起來更明晰的做法:

unzip \*.zip


[火星人 ] Linux Deepin同時解壓多個taball壓縮檔案已經有423次圍觀

http://coctec.com/docs/linux/show-post-55571.html