如果需要把一條命令在標準輸出上的輸出結果,轉換為另乙個程式或或者另乙個命令的引數,可以用xargs命令。
# man xargs
可以看到例子:
1、 find /tmp -name core -type f -print | xargs /bin/rm -f
用find命令在tmp目錄下查詢以core命名的檔案,然後刪除它們。需要注意的是如果檔案名字包含新行或者空格的話,這條命令將會被錯誤操作。
2、find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
這條命令就正確地處理了新行和空格,有可能帶來的錯誤。
這條命令和上一條意思一樣。
3、cut -d: -f1 < /etc/passwd | sort | xargs echo
大概列舉了系統的使用者。
4、find ./ -type f -print | xargs -i mv -f {} ./newdir
-i 表示 find 傳遞給xargs的結果 由{}來代替
注意:cshell和tcshell中,需要將{}用單引號、雙引號或反斜槓,否則不認識。bash可以不用。建議加上。例如:
find ./ -type f -print | xargs -t -i mv -f""./newdir 列印顯示
find ./ -type f -print | xargs -p -i mv -f""./newdir 詢問是否執行?
find ./ -type f -print | xargs -t -p -i mv -f""./newdir 列印顯示,並詢問是否執行?
管道是把乙個命令的輸出傳遞給另乙個命令作為輸入,比如:
command1 | command2
但是command2僅僅把輸出的內容作為輸入引數。
find . -name "install.log" -print列印出的是install.log這個字串,如果僅僅使用管道,那麼command2能夠使用的僅僅是install.log這個字串, 不能把它當作檔案來進行處理。當然這個command2除了xargs。xargs就是為了能夠對find搜尋到的檔案進行操作而編寫的。它能把管道傳來 的字串當作檔案交給其後的命令執行。
舉個例子:
(1)$find . -name "install.log" -print | cat
./install.log #顯示從管道傳來的內容,僅僅作為字串來處理
(2)$find . -name "install.log" -print | xargs cat
aaaaaa #將管道傳來的內容作為檔案,交給cat執行。也就是說,該命令執行的是如果存在install.log,那麼就列印出這個檔案的內容。
通過這個例子,應該很容易理解這樣有什麼不同了。當你要對匹配檔案操作時,使用find and xargs。其實這都是運用了管道。xargs是shell命令的乙個,可以把管道輸入的內容轉化為其引數要操作的檔案。
文章出處:diy部落(
linux的grep和find命令
在linux下面工作,有些命令能夠大大提高效率。本文就向大家介紹find grep命令,他哥倆可以算是必會的linux命令,我幾乎每天都要用到他們。本文結構如下 grep命令 find命令是乙個無處不在命令,是linux中最有用的命令之一。find命令用於 在乙個目錄 及子目錄 中搜尋檔案,你可以指...
Linux命令備忘例項(9) 引數代換xargs
管道命令可以將stdout重定向到stdin,但是對於只能接受命令行引數的形式接收資料的命令,無法通過stdin接收資料。此時就需要將stdin轉換為後續命令的命令列引數。xargs就是實現這個功能的命令 擅長將stdin的資料轉換為命令列引數,也可以將單行或多行文字輸入轉換為其他格式。一般編寫sh...
linux的locate命令和find命令的區別
一 locate命令 locate命令用於查詢檔案,它比find命令的搜尋速度快,它需要乙個資料庫,這個資料庫由每天的例行工作 crontab 程式來建立。當我們建立好這個資料庫後,就可以方便地來搜尋所需檔案了。即先執行 updatedb 無論在那個目錄中均可,可以放在crontab中 後在 var...