天天看點

xargs的- n1參數

起因在對一堆*.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 *

&gt; do

&gt; unzip $i

&gt; 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檔案