find命令處理之exec與xargs區別

2022-09-03 09:03:09 字數 1727 閱讀 3183

對符合條件的檔案執行所給的linux 命令,而不詢問使用者是否需要執行該命令。{}表示命令的引數即為所找到的檔案,以;表示comman命令的結束。\是轉義符,因為分號在命令中還有它用途,所以就用乙個\來限定表示這是乙個分號而不是表示其它意思。

-ok: 和-exec的作用相同,格式也一樣,只不過以一種更為安全的模式來執行該引數所給出的shell給出的這個命令之前,都會給出提示,讓使用者來確定是否執行。

xargs 要結合管道來完成

格式:find [option] express |xargs command

我們看看exec和xargs都是如何傳引數的。首先看看exec:

[root@localhost ~]# ls

index.skin1 skin1

[root@localhost ~]# find -type f -exec echo

file

{} \;

file ./skin1

file ./index.skin1

很明顯,exec是對每個找到的檔案執行一次命令,除非這單個的檔名超過了幾k,否則不會出現命令列超長出錯的問題。

我們再看看xargs:

[root@localhost ~]# ls

index.skin1 skin1

[root@localhost ~]# find -type f | xargs

echo

./skin1 ./index.skin1

這 裡大家看到,xargs是把所有找到的檔名一股腦的轉給命令。當檔案很多時,這些檔名組合成的命令列引數很容易超長,導致命令出錯。同時,這也是 find | xargs 這種組合在處理有空格字元的檔名時之所以出錯的原因:這時執行的命令已經不知道這些空格那些是分割符、那些是檔名中所包含的!而用exec則不會有這 兩個問題。下面是乙個演示:

[root@localhost ~]# mkdir

test

[root@localhost ~]# cd test

/home/xyb/test

[root@localhost ~]# touch

"file a

"[root@localhost ~]# touch

"file b

"[root@localhost ~]# ls

file a file

b[root@localhost ~]# find -type f | xargs

rmrm: 無法刪除『./file

』: 沒有那個檔案或目錄

rm: 無法刪除『a』: 沒有那個檔案或目錄

rm: 無法刪除『./file

』: 沒有那個檔案或目錄

rm: 無法刪除『b』: 沒有那個檔案或目錄

123$ ls

file a file

b[root@localhost ~]# find -type f -exec rm

{} \;

[root@localhost ~]# ls

[root@localhost ~]#

從 這裡可以看出exec的缺點是每處理乙個檔案/目錄,都要啟動一次命令,效率不好; 格式麻煩,必須用 {} 做檔案的代位符,必須用 \; 作為命令的結束符,書寫不便。而xargs不能操作檔名有空格的檔案。所以如果要使用的命令支援一次處理多個檔案,並且也知道這些檔案裡沒有帶空格的、 檔案數目也不大,那麼使用 xargs比較方便; 否則,就要用 exec了。

Linux命令 find與exec引數的用法

find是我們很常用的乙個linux命令,但是我們一般查詢出來的並不僅僅是看看而已,還會有進一步的操作,這個時候exec的作用就顯現出來了。看例子 find name txt exec ls l 查詢當前目錄的.txt檔案並以列表形式列出來 find name txt exec mv d 批量修改當...

Linux命令 find與exec引數的用法

url 命令 find與exec引數的用法 url quote find是我們很常用的乙個linux命令,但是我們一般查詢出來的並不僅僅是看看而已,還會有進一步的操作,這個時候exec的作用就顯現出來了。看例子 find name txt exec ls l 查詢當前目錄的.txt檔案並以列表形式列...

Linux常用命令 十九 find之exec

find是我們很常用的乙個linux命令,但是我們一般查詢出來的並不僅僅是看看而已,還會有進一步的操作,這個時候exec的作用就顯現出來了。exec解釋 exec 引數後面跟的是command命令,它的終止是以 為結束標誌的,所以這句命令後面的分號是不可缺少的,考慮到各個系統中分號會有不同的意義,所...