c语言 - 如何使用 exec-family 实现"find"命令?



我正在实现"find .-键入 f -exec 文件 {} \;" 此命令通过使用 execvp 函数。 如果我在 shell 中运行它,它运行良好。但是,当我通过execvp运行它时,它仍然说>>查找:缺少'-exec'的参数。

这是我的代码

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

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

"\;"逃脱";".find希望它的-exec参数被;终止,所以你需要直接传递";"

为什么不"\;"你可能会问?因为;在贝壳中有着特殊的意义。您需要在 shell 中对其进行转义,因为它的特殊含义需要忽略,并让 shell 使用文字;调用命令。使用execvp时,不涉及 shell,因此您无需转义字符并逐字传递。

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

如果您希望在 shell 中出现相同的(错误(行为和此错误消息,则需要对 exec 终止符进行双重转义:

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

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

最新更新