對符合條件的檔案執行所給的linux 命令,而不詢問使用者是否需要執行該命令。{}表示命令的引數即為所找到的檔案,以;表示comman命令的結束。\是轉義符,因為分號在命令中還有它用途,所以就用乙個\來限定表示這是乙個分號而不是表示其它意思。
-ok: 和-exec的作用相同,格式也一樣,只不過以一種更為安全的模式來執行該引數所給出的shell給出的這個命令之前,都會給出提示,讓使用者來確定是否執行。
xargs 要結合管道來完成
格式:find [option] express |xargs command
我們看看exec和xargs都是如何傳引數的。首先看看exec:
[root@localhost ~]# lsindex.skin1 skin1
[root@localhost ~]# find -type f -exec echo
file
{} \;
file ./skin1
file ./index.skin1
很明顯,exec是對每個找到的檔案執行一次命令,除非這單個的檔名超過了幾k,否則不會出現命令列超長出錯的問題。
我們再看看xargs:
[root@localhost ~]# lsindex.skin1 skin1
[root@localhost ~]# find -type f | xargs
echo
./skin1 ./index.skin1
這 裡大家看到,xargs是把所有找到的檔名一股腦的轉給命令。當檔案很多時,這些檔名組合成的命令列引數很容易超長,導致命令出錯。同時,這也是 find | xargs 這種組合在處理有空格字元的檔名時之所以出錯的原因:這時執行的命令已經不知道這些空格那些是分割符、那些是檔名中所包含的!而用exec則不會有這 兩個問題。下面是乙個演示:
[root@localhost ~]# mkdirtest
[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命令,它的終止是以 為結束標誌的,所以這句命令後面的分號是不可缺少的,考慮到各個系統中分號會有不同的意義,所...