Linux tar命令批量解壓方法

 方法:linux

第一:
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 "*.gz"|xargs -i tar xvzf {}
這條命令可解壓當前目錄下的全部gz文件
批量解壓是比較鬱悶的事,之前嘗試各類方法,甚至用腳本循環語句解壓都不行
如今發現這條命令能夠搞定,maxdepth表示搜索深度,1表明只搜索當前目錄

第四:for i in $(ls *.gz);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> <archived_file>
<tarfile.tar> 是選項f所要求的,只能是一個文件,好比myfiles.tar。
<archived_file> 是myfiles.tar所包含的歸了檔的文件中的一個或者多個成員文件。若是是多個,能夠用通配符。
先別跟我急,我知道,這些你是清楚的。可是,你的問題是,用了
tar -xvf *.tar
如樓上所說,tar接收到的是
tar -xvf a.tar b.tar c.tar ...
tar把你的意圖理解爲,在a.tar裏解出b.tar c.tar ...
相關文章
相關標籤/搜索