shell編程必需要掌握的命令-xargs

一,說xargs命令前,說一下什麼是shell編程linux

什麼是shell編程呢,說白了就是按必定的規則把各類命令組織起來,完成必定的事情。純屬我的理解,哈哈。無論是交互式的shell,仍是非交互的shell,它都是由一些命令組成的。sql

因此命令很重要。xargs就是其中之一,而且仍是至關重要的一個命令,爲何說它重要呢,由於他和能其餘命令結合使用,把一個命令的輸出,看成參數傳給另外一個命令。這個根find命令參數中的exec很像,可是不一樣:如下4點在網上找的,第一點,是親身體驗過,家裏我用的是archlinux,當你經過exec傳不少數據給後面的命令時,會卡在哪兒,其餘的沒試過,若是有興趣的朋友能夠本身比較一下他們速度,shell

[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選項,會爲匹配的每一個文件處理分配個進程,並非將匹配到的文件做爲一個參數一次執行,這樣就會觸發多個進程,進而使系統性能降低,影響處理效率。spa

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 {} {}.bak
cp test test.bak
相關文章
相關標籤/搜索