使用find -exec时出现exec()错误

3

我需要使用脚本查找一个名为Test的可执行文件,该文件接受一个路径作为参数,并将其执行。我正在使用以下代码行进行操作:

find -name Test -exec {} path \;

在Test中,我收到了一个Excel文件:
    execl("./Test1","Test1",(char*)0);
    perror("Exec failed");
    exit(EXIT_FAILURE);

在同一个目录下,Test1Test 并存。手动执行 Test 时一切正常,但使用上述命令行时出现错误:Exec failed: No such file or directory

出了什么问题?


只是好奇,你为什么想要执行这个路径? - user657496
首先,find 命令是否真的找到了文件? - tbert
我对这些东西还是个新手,所以我可能犯了一些平凡的错误,但为了回答你:@rsplak:路径是_Test_的参数,正如我从man页面上读到的:find的所有后续参数都被视为命令的参数,直到遇到一个由“;”组成的参数为止。 这样做有问题吗? - cifz
你有执行“Test”的权限吗? - ladaghini
1
顺便说一下,这听起来很危险。在运行它们之前,你不应该知道你的可执行文件位于哪里吗?这将运行在当前目录树下找到的所有名为“Test”的可执行文件。 - chepner
显示剩余2条评论
1个回答

4

find命令从你执行它的目录中执行Test。如果你可以更改Test的代码,那么请将Test1的绝对路径放入其中:

execl("/home/myuser/some/path/Test1","Test1",(char*)0);
perror("Exec failed");
exit(EXIT_FAILURE);

或者您可以使用-execdir代替-exec

find -name Test -execdir {} path \;

从find手册中获得:

-execdir: 类似于-exec,但指定的命令是从包含匹配文件的子目录运行的, 这通常不是您启动find的目录。


使用execdir代替exec。您不需要更改其他任何内容。 - perreal
谢谢,我会尝试这两个解决方案(我无法在代码中放入绝对路径,但我可以通过readlink来解决)。编辑:抱歉没有刷新页面,所以我没有看到你的编辑! - cifz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接