linux批量解壓縮

2022-03-24 01:41:50 字數 1596 閱讀 3186

引用

find . -name "stat_*_2012_05_26_log.tgz" -exec cp {} /home/adstat/apache_log/stat/ \;  

上述命令代表在當前資料夾下查詢符合正規表示式stat_*_2012_05_26_log.tgz 的檔案並分別複製到/home/adstat/apache_log/stat/目錄下。 

那麼批量解壓檔案是否這樣呢:

find . -name "stat_*_2012_05_26_log.tgz"|xargs tar -zxvf  

其實是不可以的,執行結果如下:

tar: ./stat_64_138_2012_05_26_log.tgz:歸檔中找不到  

tar: ./stat_10_10_75_80_2012_05_26_log.tgz:歸檔中找不到  

tar: ./stat_64_139_2012_05_26_log.tgz:歸檔中找不到  

tar: ./stat_74_195_2012_05_26_log.tgz:歸檔中找不到  

為什麼tar不支援這種萬用字元語法呢?

萬用字元是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 .

可以使用的方法如下:

方法:第一:

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

Linux 壓縮 解壓縮

1.以.a為副檔名的檔案 tar xv file.a 2.以.z為副檔名的檔案 uncompress file.z 3.以.gz為副檔名的檔案 gunzip file.gz 4.以.bz2為副檔名的檔案 bunzip2 file.bz2 5.以.tar.z為副檔名的檔案 tar xvzf file....

Linux壓縮 解壓縮

tar 解包 tar xvf filename.tar 打包 tar cvf filename.tar dirname 注 tar是打包,不是壓縮!gz解壓1 gunzip filename.gz 解壓2 gzip d filename.gz 壓縮 gzip filename tar.gz 和 tg...

linux 壓縮 解壓縮

解包 tar zxvf filename.tar 打包 tar czvf filename.tar dirname gz命令 解壓1 gunzip filename.gz 解壓2 gzip d filename.gz 壓縮 gzip filename tar.gz 和 tgz 解壓 tar zxvf...