【问题标题】:execl + find + -exec: missing argument to `-exec'execl + find + -exec: `-exec' 缺少参数
【发布时间】:2017-12-10 16:37:39
【问题描述】:

我正在尝试使用find ... -exec ... 运行execlp,而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);

【问题讨论】:

  • execlp == C ?在linux下?也许添加那些标签。
  • @PatrickArtner:添加

标签: c linux find execl


【解决方案1】:

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

使用此语法应该可以工作

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

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


编辑——你实际上只做一个找到所以这部分是没有必要的

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

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

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 2011-02-27
    • 2014-04-05
    • 2019-07-10
    • 2013-05-08
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多