execl + find + -exec:缺少“-exec”的参数

execl + find + -exec: missing argument to `-exec'

我正在尝试 运行 execlpfind ... -exec ...,并且 find 程序始终告诉我:

find: missing argument to `-exec'

有什么问题吗?当我 运行 在我的 shell 上找到这些参数时,它成功了。

我的函数调用如下(在查看相关的 SO 线程之后,我尝试了几种参数安排):

execlp("find","find","/home/me","-exec","/usr/bin/stat", "{}", "\;",NULL);
execlp("find","find","/home/me","-exec","/usr/bin/stat", "'{}'", "\;",NULL);
execlp("find","find","/home/me","-exec","/usr/bin/stat", "{}", "';'",NULL);
execlp("find","find","/home/me","-exec","/usr/bin/stat {} \;",NULL);

当您从 C 执行命令时,您不需要 ;

之前的 \

使用此语法应该可行

execlp("find","find","/home/me","-exec","/usr/bin/stat", "{}", ";",NULL);

当在 shell 上时,; 标记命令的结束,必须转义。 execlp 不会通过 shell 来执行命令,它会立即执行。


编辑 -- 你实际上只做一个查找所以这部分不是必需的

此外,exec 系列用请求的命令替换了当前进程。所以只有第一个execlp会被执行。

一个解决方案是对每个findfork()(一个一个的,等待子进程结束,否则输出会是所有结果的混合)。