Linux的find和xargs命令

2021-09-01 17:40:40 字數 1578 閱讀 1925

如果需要把一條命令在標準輸出上的輸出結果,轉換為另乙個程式或或者另乙個命令的引數,可以用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...