在执行从C++中查找时,我到底缺少什么
What exactly am I missing in executing find from C++?
我的努力是在我的程序中使用一段代码来查找和复制系统中的某些文件。
我编写的代码是:
void scan(int i)
{
pid_t parent = getpid();
pid_t pid = fork();
if (pid == -1)
{
cout << "failed to fork" << endl;
return;
}
else
{
if(pid > 0)
{
int status;
waitpid(pid, &status, 0);
}
else
{
if(i == 0)
{
execl("/usr/bin/find","find", "/", "-name", "'*.mp3'","-exec","cp","{}","/home/pi/Music","\;",(char *)0);
_exit(EXIT_FAILURE);
}
}
}
return; }
尽管如此,系统将返回以下内容:
find: missing argument to `-exec'
我究竟如何更正我的 execl 命令以执行此 shell 命令:
find / -name '*.mp3' -exec cp {} /home/pi/Music ;
TL;DR - 删除;
之前的\
。
在 shell 的上下文中,命令在将各个参数传递给find
可执行文件之前进行解释。 ;
是一个特殊字符,因此需要转义才能被解释为文字(因为它是一个特殊字符(——find
实际上只需要;
。
但是,您不会在 shell 上传递参数 - execl
将参数直接传递给目标可执行文件。 所以没有必要逃避它。
正如@AndrewHenle在下面的评论中指出的那样,出于类似的原因,您还需要从'*.mp3'
中删除这两个'
。
尽管你的问题标题,但看不到Bash。然而,您使用的是 Bash 风格的引用。
"'*.mp3'"
您的find
将找不到任何内容,除非您的文件名称中带有单引号。使用"*.mp3"
.
"\;"
find
需要一个分号来终止-exec
参数。 ;
是使用文字分号的 Bash 方法。通常;
是 Bash 中的保留字符。使用简单的";"
。
相关文章:
- 在只读(即 const)访问器上执行结构化绑定的最佳实践是什么?
- 在 c++ 中从执行的 shell 命令获取返回状态的安全方法是什么?
- 这个编译器错误究竟希望我执行什么?
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 是什么将程序集转换为实际可执行的材料
- 在高通六边形处理器的word32上执行水平求和的最快方法是什么
- 在 MySQL 连接器C++ API 中使用一个函数调用执行多个查询的正确方法是什么?
- 如果我在 Linux 上更改C++动态共享库,而我的可执行程序在其上使用,会发生什么
- 这个 c++ 程序没有执行什么?
- 抛出多个异常时,catch 块执行的顺序是什么,为什么?
- 当您希望在Arduino Uno编程中同时执行不同函数时,使用什么代码/语句
- C 类方法的执行时间取决于什么
- 当删除或删除[]被执行时,计算机会做什么?
- 在CUDA中使用小M的两个MXN矩阵执行矢量点产品的最快方法是什么?
- 如果默认构造函数不执行任何操作,则目的是什么
- 有什么方法可以在C++中读取文本并执行这样的代码命令吗?
- 在执行从C++中查找时,我到底缺少什么
- 当执行此代码中的第二个语句时,内部会发生什么
- 什么是__memset_sse2,为什么它执行这么多说明
- 这段代码中发生了什么?(执行一个字符缓冲区)