find /tmp/ -name "*.log" -mtime +4 | xargs -i -t mv {} /home/
find /tmp/ -name "*.log" -mtime +4 -print0 | xargs -0 rm -f
xargs(1)
xargs是給命令傳遞參數的一個過濾器,也是組合多個命令的一個工具。它把一個數據流分割為一些足夠小的塊,以方便過濾器和命令進行處理。通常情況下,xargs從管道或者stdin中讀取數據,但是它也能夠從文件的輸出中讀取數據。xargs的默認命令是echo,這意味著通過管道傳遞給xargs的輸入將會包含換行和空白,不過通過xargs的處理,換行和空白將被空格取代。
1.選項解釋
-0 當sdtin含有特殊字元時候,將其當成一般字符,想/'空格等
例如:root@localhost:~/test#echo "//"|xargs echo
root@localhost:~/test#echo "//"|xargs -0 echo
/
-a file 從文件中讀入作為sdtin
-e flag 注意有的時候可能會是-E,flag必須是一個以空格分隔的標志,當xargs分析到含有flag這個標志的時候就停止。
-p 當每次執行一個argument的時候詢問一次用戶。
-n num 后面加次數,表示命令在執行的時候一次用的argument的個數,默認是用所有的。
-t 表示先打印命令,然后再執行。
-i 或者是-I 將xargs的每項名稱,一般是一行一行賦值給{},可以用{}代替。
-r no-run-if-empty 當xargs的輸入為空的時候則停止xargs,不用再去執行了。
-s num 命令行的最好字符數,指的是xargs后面那個命令的最大命令行字符數。
-L num Use at most max-lines nonblank input lines per command line.-s是含有空格的。
-l 同-L
-d delim 分隔符 默認的xargs分隔符是回車,argument的分隔符是空格,這里修改的是xargs的分隔符
-x exit的意思 主要是配合-s使用。
-P 修改最大的進程數,默認是1,為0時候為as many as it can ,這個例子我沒有想到,應該平時都用不到的吧。
2.實例
xargs 是一個強有力的命令,它能夠捕獲一個命令的輸出,然后傳遞給另外一個命令,下面是一些如何有效使用xargs 的實用例子。
1. 當你嘗試用rm 刪除太多的文件,你可能得到一個錯誤信息:/bin/rm Argument list too long. 用xargs 去避免這個問題
find ~ -name ‘*.log’ -print0 | xargs -0 rm -f
2. 獲得/etc/ 下所有*.conf 結尾的文件列表,有幾種不同的方法能得到相同的結果,下面的例子僅僅是示范怎么實用xargs ,在這個例子中實用 xargs將find 命令的輸出傳遞給ls -l
# find /etc -name "*.conf" | xargs ls –l
3. 假如你有一個文件包含了很多你希望下載的URL, 你能夠使用xargs 下載所有鏈接
# cat url-list.txt | xargs wget –c
4. 查找所有的jpg 文件,并且壓縮它
# find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
5. 拷貝所有的圖片文件到一個外部的硬盤驅動
# ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory
6. -i命令
$ ls | xargs -t -i mv {} {}.bak
-i 選項告訴 xargs 用每項的名稱替換 {}。-t 選項指示 xargs 先打印命令,然后再執行。
Xargs用法詳解
xagrs(2)
1.?簡介
??之所以能用到這個命令,關鍵是由于很多命令不支持|管道來傳遞參數,而日常工作中有有這個必要,所以就有了xargs命令,例如:
find?/sbin?-perm?+700?|ls?-l???????這個命令是錯誤的
find?/sbin?-perm?+700?|xargs?ls?-l???這樣才是正確的
xargs?可以讀入?stdin?的資料,并且以空白字元或斷行字元作為分辨,將?stdin?的資料分隔成為?arguments?。?因為是以空白字元作為分隔,所以,如果有一些檔名或者是其他意義的名詞內含有空白字元的時候,?xargs?可能就會誤判了~他的用法其實也還滿簡單的!就來看一看先!
2.?選項解釋
-0?當sdtin含有特殊字元時候,將其當成一般字符,想/'空格等
例如:root@localhost:~/test#echo?"//"|xargs??echo?
??????root@localhost:~/test#echo?"//"|xargs?-0?echo?
???????/
-a?file?從文件中讀入作為sdtin,(看例一)
-e?flag?,注意有的時候可能會是-E,flag必須是一個以空格分隔的標志,當xargs分析到含有flag這個標志的時候就停止。(例二)
-p?當每次執行一個argument的時候詢問一次用戶。(例三)
-n?num?后面加次數,表示命令在執行的時候一次用的argument的個數,默認是用所有的。(例四)
-t?表示先打印命令,然后再執行。(例五)
-i?或者是-I,這得看linux支持了,將xargs的每項名稱,一般是一行一行賦值給{},可以用{}代替。(例六)
-r?no-run-if-empty?當xargs的輸入為空的時候則停止xargs,不用再去執行了。(例七)
-s?num?命令行的最好字符數,指的是xargs后面那個命令的最大命令行字符數。(例八)
?
-L??num?Use?at?most?max-lines?nonblank?input?lines?per?command?line.-s是含有空格的。
-l??同-L
-d?delim?分隔符,默認的xargs分隔符是回車,argument的分隔符是空格,這里修改的是xargs的分隔符(例九)
-x?exit的意思,主要是配合-s使用。
-P?修改最大的進程數,默認是1,為0時候為as?many?as?it?can?,這個例子我沒有想到,應該平時都用不到的吧。
3.?應用舉例
例一:
root@localhost:~/test#cat?test?
#!/bin/sh
echo?"hello?world/n"
root@localhost:~/test#xargs?-a?test?echo
#!/bin/sh?echo?hello?world/n
root@localhost:~/test#
例二:
root@localhost:~/test#cat?txt
/bin?tao?shou?kun
root@localhost:~/test#cat?txt|xargs?-E?'shou'?echo
/bin?tao
root@localhost:~/test#
例三:
root@localhost:~/test#cat?txt|xargs?-p?echo
echo?/bin?tao?shou?kun?ff??...y
/bin?tao?shou?kun?ff
例四:
root@localhost:~/test#cat?txt|xargs?-n1?echo
/bin
tao
shou
kun
root@localhost:~/test3#cat?txt|xargs??echo
/bin?tao?shou?kun
例五:
root@localhost:~/test#cat?txt|xargs?-t?echo
echo?/bin?tao?shou?kun?
/bin?tao?shou?kun
例六:
$?ls?|?xargs?-t?-i?mv?{}?{}.bak
例七:
root@localhost:~/test#echo?""|xargs?-t?mv
mv?
mv:?missing?file?operand
Try?`mv?--help'?for?more?information.
root@localhost:~/test#echo?""|xargs?-t?-r??mv
root@localhost:~/test#
(直接退出)
例八:
root@localhost:~/test#cat?test?|xargs?-i?-x??-s?14?echo?"{}"
exp1
exp5
file
xargs:?argument?line?too?long
linux-2
root@localhost:~/test#
例九:
root@localhost:~/test#cat?txt?|xargs?-i?-p?echo?{}
echo?/bin?tao?shou?kun??...y
root@localhost:~/test#cat?txt?|xargs?-i?-p?-d?"?"?echo?{}
echo?/bin??...y
echo?tao??.../bin
y
echo?shou??...tao
再如:
root@localhost:~/test#cat?test?|xargs?-i?-p?-d?"?"?echo?{}
echo?exp1
exp5
file
linux-2
ngis_post
tao
test
txt
xen-3
??...y
root@localhost:~/test#cat?test?|xargs?-i?-p?echo?{}
echo?exp1??...y
echo?exp5??...exp1
y
echo?file??...exp5
y
?