我在 Linux 上用 C 编写了一个简单的程序来删除目录中的所有文件,除了一个名为 svn
的文件,如下所示:
1 #include <stdio.h>
2
3 int main()
4 {
5 system("rm !(svn)");
6 return 0;
7 }
但是当我编译并运行它时,终端显示:sh: Syntax error: "("unexpected
但是,当我直接在终端中键入并运行命令时,所有事情都正确完成。 有什么想法吗?
最佳答案
答案是不要使用system
。使用 Linux 系统调用列出目录中的文件并使用 unlink() 删除它们。像这样的东西:
DIR* dirHandle = opendir(dirName);
struct dirent* dirEntry;
while ((dirEntry = readdir(dirHandle)) != NULL)
{
if (strcmp(dirEntry->d_name, "svn") != 0)
{
unlink(dirEntry->d_name);
}
}
警告:省略所有错误处理,未经编译和测试,readdir 可能会返回 .
和 ..
也不需要删除。
关于C系统函数导致错误 'sh: Syntax error: "("unexpected ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4077209/