如何使用exec-family实现“查找”命令?

时间:2019-10-11 05:09:57

标签: c linux

正在尝试实现“”查找。 -type f -exec file {} \ ;;“使用execvp函数执行此命令。如果我在shell中运行它,效果很好。但是当我通过execvp运行它时,它会一直显示>> find:缺少`-exec'的参数

这是我的代码

#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"

int main()
{
    char *argv[]={"find", ".", "-type","f","-exec", "file", "{}", "\\;",NULL};
    execvp(argv[0],argv);
}

1 个答案:

答案 0 :(得分:1)

转义规则可能很棘手,尤其是在涉及多个级别或不同上下文的情况下:)

"\\;"转义为"\;"find期望其-exec args被;终止,因此您需要直接传递";"

您为什么不问"\\;"?因为;在shell中有特殊含义。您需要在shell中对其进行转义,因为需要忽略其特殊含义,并使shell用文字;来调用命令。使用execvp时,不涉及任何外壳,因此您无需转义字符并将其逐字传递。

#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"

int main()
{
    char *argv[]={"find", ".", "-type","f","-exec", "file", "{}", ";",NULL};
    execvp(argv[0],argv);
}

如果您想要相同的(错误的)行为,并且此错误消息出现在外壳程序中,则需要两次转义exec终止符:

find . -type f -exec file {} \\\;

find . -type f -exec file {} '\;'