C系统函数导致错误’sh:语法错误:“(”意外“

我在Linux上用C编写了一个简单的程序来删除目录中的所有文件,除了一个名为svn的文件,如下所示:

  1 #include  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); } } 

警告:省略所有error handling,未编译和测试,readdir可能会返回...也需要不删除。

您可能需要使用此:

 system("/bin/bash -c 'rm !(svn)'") 

或者可能:

 system("/bin/bash -O extglob -c 'rm !(svn)'") 

要么:

 system("find . -maxdepth 1 ! -name 'svn' -delete") 

或类似的。

但使用JeremyP的答案可能更好。

你必须使用sh shell语法,你不是这样做的。

我想我只是将shell添加到系统命令:

 system("/bin/csh rm !(svn)"); 

或者你使用的任何shell。

解决方法:将文件移到目录外(fe in / tmp或..),全部删除,将其移回(使用多个system()调用执行)。

另一种方法:

 find . -prune ! -name svn | xargs /bin/rm -f