1. 程式人生 > >Linux:tar命令批量解壓方法總結

Linux:tar命令批量解壓方法總結

由於linux的tar命令不支援批量解壓,所以很多網友編寫了好多支援批量解壓的shell命令,收集了一下,供大家分享:
第一:

for tar in *.tar.gz;  do tar xvf $tar; done
for tar in *.tar.bz2; do tar xvf $tar; done

第二:
用tar命令批量解壓某個資料夾下所有的tar.gz檔案

ls *.tar.gz | xargs -n1 tar xzvf

第三:

find -maxdepth 1 -name "*.bz2"|xargs -i tar xvjf {}

這條命令可解壓當前目錄下的所有bz2檔案

批量解壓是比較鬱悶的事,以前嘗試各種方法,甚至用指令碼迴圈語句解壓都不行

現在發現這條命令可以搞定,maxdepth表示搜尋深度,1代表只搜尋當前目錄
第四:

for i in $(ls *.tar);do tar xvf $i;done

問題:
我想進行批量解壓tar檔案,使用tar -xvf .tar會出錯,提示“Not found in archive”。解決方法有很多,比如寫一個指令碼之類的。 請問為什麼tar不支援這種萬用字元語法呢?是否有特殊的原因? 我試過gzip就支gzip -d .tar.gz。
回答:
萬用字元是shell解決的問題

tar -xvf *.tar
實際上執行tar時,tar接收到的是
tar -xvf a.tar b.tar c.tar …
如果當前目錄跟本沒有tar的東西,那麼tar就收到’*.tar’這個引數
與win不同,linux所有字元都可以作檔名,也即目錄中不存在著 *.tar這個檔案
為了防止 *.tar被shell解釋為a.tar b.tar c.tar…
可以給它加個單引號

用tar解開一個Archive時,語法是
tar -xvf <tarfile.tar>
<tarfile.tar> 是選項f所要求的,只能是一個檔案,比如myfiles.tar。
是myfiles.tar所包含的歸了檔的檔案中的一個或者多個成員檔案。如果是多個,可以用萬用字元。
先別跟我急,我知道,這些你是清楚的。但是,你的問題是,用了
tar -xvf *.tar
如樓上所說,tar接收到的是
tar -xvf a.tar b.tar c.tar …
tar把你的意圖理解為,在a.tar裡解出b.tar c.tar …

       如果您喜歡我寫的博文,讀後覺得收穫很大,不妨小額贊助我一下,讓我有動力繼續寫出高質量的博文,感謝您的讚賞!!!