一个-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/ea096af9d765https://blog.csdn.net/leonzheng/article/details/105405554
使用“ +”(加号)和“;”有什么区别?(分号)在-exec命令中?
-exec ... \;
将一个接一个地运行。因此,如果您有三个文件,则exec行将运行3次。
-exec ... {} +
是对于可以在同一时间取一个以上的文件的命令(例如cat
,stat
,ls
)。找到的文件find
像xargs
命令一样链接在一起。这意味着减少分叉,对于较小的操作,可能意味着大幅提高速度。
这是一个性能演示,其中包含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
标签:...,log,exec,后面,cat,命令,find From: https://www.cnblogs.com/tiancai/p/17641231.html