我在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
以上就是c/c++开发分享C系统函数导致错误’sh:语法错误:“(”意外“相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/523153.html