相关疑难解决方法(0)

查找:缺少 -exec 的参数

我正在尝试运行以下命令:

find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar '{}' +
Run Code Online (Sandbox Code Playgroud)

这是返回错误:

find: missing argument to -exec
Run Code Online (Sandbox Code Playgroud)

我看不出这个命令有什么问题,因为它似乎与手册页匹配:

-exec 命令 {} +

-exec 选项的这个变体在选定的文件上运行指定的命令,但命令行是通过在每个选定的文件名后附加来构建的;命令的总调用次数将远小于匹配文件的数量。命令行的构建方式与 xargs 构建其命令行的方式非常相似。命令中只允许有一个“{}”实例。该命令在起始目录中执行。

我也试过:

find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar {} +
find a/folder b/folder -name *.c -o -name *.h -exec 'grep -I foobar' {} +
find a/folder b/folder -name *.c -o -name *.h -exec 'grep -I foobar' '{}' +
find a/folder b/folder -name "*.c" -o -name …
Run Code Online (Sandbox Code Playgroud)

find

42
推荐指数
3
解决办法
8万
查看次数

为什么“find -exec cmd {} +”需要以“{} +”结尾?

前言:我理解-exec {} \;&之间的区别-exec {} +。我也没有问题,因为这样,我只是好奇的语义find


-exec+而不是结束参数时;,我们需要以 结束{} +,例如:

# FreeBSD find
$ find . -type f -exec cp {} /tmp +
find: -exec: no terminating ";" or "+"

# GNU find is even more cryptic:
$ find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)

;在这些示例中使用而不是+工作正常(但显然做了其他事情)。

POSIX

-exec utility_name [argument ...] ;
-exec utility_name [argument ...] {} +

... …

find history posix

12
推荐指数
1
解决办法
3608
查看次数

标签 统计

find ×2

history ×1

posix ×1