find -exec 命令后面的\;和+

一个-exec只能执行一个命令,而且必须在命令后面加上终结符,终结符有两个:“;”和“+”。
其中“;”会对每一个find到的文件去执行一次cmd命令。而”+“让find到的文件一次性执行完cmd命令。为什么必须有终结符?因为一个find后面可以有多个-exec cmd,所以必须要有终结符分割他们。如果不加,会包缺少参数。

[work@jkz ~]$ find . -maxdepth 1 -type f -name "*.log" -exec echo {} \; -exec echo {} +

./server02.log
./server03.log
./server00.log
./server01.log
./timing.log
./server.log
./server02.log ./server03.log ./server00.log ./server01.log ./timing.log ./server.log

为什么要加“\”?
“;”是shell的命令分隔符,如果只有“;”,那么这条命令就会被shell截断。

[work@jkz ~]$ find . -maxdepth 1 -type f -name "*.log" -exec echo {} ;

find: missing argument to `-exec'

https://www.jianshu.com/p/ea096af9d765

https://blog.csdn.net/leonzheng/article/details/105405554

 

使用“ +”(加号)和“;”有什么区别?(分号)在-exec命令中?

-exec ... \;将一个接一个地运行。因此,如果您有三个文件,则exec行将运行3次。

-exec ... {} +是对于可以在同一时间取一个以上的文件的命令(例如catstatls)。找到的文件findxargs命令一样链接在一起。这意味着减少分叉,对于较小的操作,可能意味着大幅提高速度。

这是一个性能演示,其中包含10,000个空文件。

$ mkdir testdir
$ touch testdir/{0000..9999}

$ time find testdir/ -type f -exec cat {} \;
real    0m8.622s
user    0m0.452s
sys     0m8.288s

$ time find testdir/ -type f -exec cat {} +
real    0m0.052s
user    0m0.015s
sys     0m0.037s

同样,这仅适用于可以使用多个文件名的命令。您可以通过查看其手册来确定命令是否类似。这是来自的摘要man cat

SYNOPSIS
       cat [OPTION]... [FILE]...

省略号[FILE]...表示可以使用多个文件。

+只能在单个命令上使用,并且{}一行中必须恰好有一个。\;可以与多个零对多组操作。

 

 

转自:https://qastack.cn/ubuntu/558817/what-is-the-difference-between-using-plus-and-semicolon-in-exec-com

 

 
posted @ 2023-08-18 18:02  甜菜波波  阅读(623)  评论(0编辑  收藏  举报