起因在對一堆*.tar.gz檔案解壓縮時,發現tar xvfz *.tar.gz不管用,一查,原來是tar xvfz *.tar.gz會被shell給拆成tar xvfz a.tar.gz b.tar.gz c.tar.gz,而在a.tar.gz中不存在b.tar.gz,當然會報錯。
解決方法是使用腳本,寫法很多,其中一種是:
for i in $(ls *.tar);do tar xvf $i;done
或:for tar in *.tar.gz; do tar tvfz $tar;done
另還有一種使用xagrs的寫法:
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指令,這樣就解決了問題。.
<a href="http://blog.163.com/squall_smile/blog/static/603498402013122570281/">http://blog.163.com/squall_smile/blog/static/603498402013122570281/</a>
其實這種問題的解決方法有很多種,這裡列舉四種比較常見的:
法一:用分号隔開(适用于對象較少的時候)
# ls
p2848731_11i_SOLARIS.zip p2848731_11i_zhs.zip p4262360_11i_GENERIC.zip
#unzip p2848731_11i_SOLARIS.zip;unzip p2848731_11i_zhs.zip;unzip p4262360_11i_GENERIC.zip
法二:
#find . -name '*.zip' -exec unzip {} ;
法三:
#ls *.zip | xargs -n1 unzip
法四:(借用一個循環)
# for i in *
> do
> unzip $i
> done
<a href="http://blog.chinaunix.net/uid-57865-id-2090586.html">http://blog.chinaunix.net/uid-57865-id-2090586.html</a>
法五:
使用
unzip "*.zip"
ls *.zip | xargs -n1 unzip
解壓目前目錄下的所有zip檔案