歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 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> <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 ...

ls *.tar.gz|xargs -n1 tar tvfz關鍵就在於這個xagrs的-n1參數是什麼意思呢?n1應該是指每次只傳遞一個參數給args命令,有高人寫過如下腳本對比,非常能說明問題:echo "1 2 3 4"|xargs -n1

1

2

3

4

echo "1 2 3 4"|xargs -n2

1 2

3 4這樣,若加n1參數,則*.tar.gz會拆成每個tar.gz文件後,一個一個傳給tar tvfz命令,這樣就解決了問題。

Copyright © Linux教程網 All Rights Reserved