Linux Deepin同時解壓多個taball壓縮檔案 如何在 Linux Deepin 的命令列上同時解壓多個 tarball 檔案?在介紹之前,我們先來舉一個例子。假設我們在目前的目錄下有如下幾個壓縮檔案: www.2cto.com $ lsbackup1.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 *.tartar: backup2.tar: Not found in archivetar: backup3.tar: Not found in archivetar: 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),可以用迴圈來實現: www.2cto.com for tarname in *.tar; dotar xf "$tarname"done下面說一下迴圈和 for-迴圈兩個基本概念。迴圈是用來在滿足某個條件之前重複其內部的代碼的一種結構。滿足該條件時迴圈即停止,其外部的代碼會繼續執行。for-迴圈是將一變數逐次設定為一個列表中的各個值,並重複直到該列表用完的一類迴圈結構。在這裡,for-迴圈會將匹配 *.tar 的檔案名稱作為參數反覆調用執行 tar xf。這樣我們就將壓縮檔案逐一“自動地”解壓出來。 還有另一種很常見的檔案格式是 ZIP。解壓 ZIP 檔案的命令是 unzip。這裡也有同樣的問題:unzip 只接受一個選項來指定 ZIP 檔案。所以可以用同樣的方法來解決: for zipfile in *.zip; dounzip "$zipfile"done對於 unzip 命令還有另一種做法:它可以讀入類似 shell 的樣式(pattern)來指定 ZIP 檔案名稱。為防止 shell 對於這些樣式的解釋,需要使用引號。unzip(而非 shell)在這裡會解釋 *.zip: unzip "*.zip"# 還可以用下面這種看起來更明晰的做法:unzip \*.zip