execl + find + -exec:缺少`-exec'的参数

时间:2017-12-10 16:37:40

标签: c linux find execl

我正在尝试使用execlp运行find ... -exec ...,而find计划一直告诉我:

find: missing argument to `-exec'

可能有什么不对?当我在shell上使用这些参数运行find时,它会成功。

我的函数调用跟随(在查看相关的SO线程之后,我已经尝试了几种argmuments的安排):

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);

1 个答案:

答案 0 :(得分:0)

从C执行命令时,\

之前不需要;

使用此语法应该可以正常工作

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

在shell上,;标记命令的结束,并且必须进行转义。 execlp没有通过shell执行命令,它会立即执行。

<小时/> 编辑 - 您实际上只执行一次查找所以此部分不是必需的

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

每个fork()的解决方案是find(逐个等待子进程结束,否则输出将是所有结果的混合)。