execl + find + -exec:缺少“-exec”的参数
execl + find + -exec: missing argument to `-exec'
我正在尝试 运行 execlp
与 find ... -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
会被执行。
一个解决方案是对每个find
fork()
(一个一个的,等待子进程结束,否则输出会是所有结果的混合)。
我正在尝试 运行 execlp
与 find ... -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
会被执行。
一个解决方案是对每个find
fork()
(一个一个的,等待子进程结束,否则输出会是所有结果的混合)。