0

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

find: missing argument to `-exec'

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

我的函数调用如下(在查看了相关的 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);
4

1 回答 1

0

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

使用这种语法应该可以工作

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

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


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

此外,该exec族将当前进程替换为请求的命令。所以只会execlp执行第一个。

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

于 2017-12-10T16:53:47.567 回答