1. 程式人生 > >shell程式設計必須要掌握的命令-xargs

shell程式設計必須要掌握的命令-xargs

一,說xargs命令前,說一下什麼是shell程式設計

什麼是shell程式設計呢,說白了就是按一定的規則把各種命令組織起來,完成一定的事情。純屬個人理解,哈哈。不管是互動式的shell,還是非互動的shell,它都是由一些命令組成的。

所以命令很重要。xargs就是其中之一,並且還是相當重要的一個命令,為什麼說它重要呢,因為他和能其他命令結合使用,把一個命令的輸出,當作引數傳給另一個命令。這個根find命令引數中的exec很像,但是不同:以下4點在網上找的,第一點,是親身體驗過,家裡我用的是archlinux,當你通過exec傳很多資料給後面的命令時,會卡在哪兒,其他的沒試過,如果有興趣的朋友可以自己比較一下他們速度,

[zhangy@BlackGhost music]$ time find /home/zhangy/download/ -name ".gz" -print
real    0m0.053s
user    0m0.003s
sys     0m0.003s

1,使用find 的exec選項去處理匹配到的選項時,find 一次性將匹配到得引數傳給exec執行。但有的系統,對exec 傳的引數長度有限制,這樣在find 命令執行幾分鐘後會報溢位,錯誤資訊通常是“引數列太長”或“引數列溢位"。

2,xargs 與find 命令合用的時候,find 把匹配到得命令傳遞給xargs ,xargs 每次只獲取一部分檔案,而不是全部。分批處理。

3, 使用exec選項,會為匹配的每個檔案處理分配個程序,並不是將匹配到的檔案作為一個引數一次執行,這樣就會觸發多個程序,進而使系統性能下降,影響處理效率。

4,xargs則只有一個程序、但xargs 處理是否分批 ,批次大小,也會受系統些可調引數影響。

二,xargs應用例項

1,找出檔案,改變檔案所屬使用者

#將把當前目錄下面以test開頭的檔案使用者改為zhangy
[root@BlackGhost download]# find . -name "test*"  -print | xargs chown zhangy:users

#檢視當前目錄中以test開頭的檔案所屬使用者
[root@BlackGhost download]# find . -name "test*"  -print -exec ls -al {} \;
./test.sql.zip
-rw-r--r-- 1 zhangy users 1981 Feb  2 16:05 ./test.sql.zip
./test.zip
-rw-r--r-- 1 zhangy users 164 May 23 22:54 ./test.zip

2,把系統的使用者統計一下

[zhangy@BlackGhost download]# cut -d: -f1 < /etc/passwd | xargs echo >> /home/zhangy/userlist.txt

3,備份檔案

[zhangy@BlackGhost ddd]$ ls |xargs -i cp {} {}.ba