我尝试了以下操作,该操作在 Bash 中通常有效:
root@nycmesh-eb94:/etc# find . -exec grep eth0 {}\;
find: -exec requires an argument
root@nycmesh-eb94:/etc# find . -exec 'grep eth0 {};'
find: -exec requires an argument
root@nycmesh-eb94:/etc# echo $SHELL
/bin/ash
答案1
分号对于 来说是必需的,因为它find
可以确定从哪里停止读取 的命令行-exec
。斜线对于停止ash
将分号解释为命令分隔符来说是必需的。在您的第一个示例中,它前面缺少一个空格,因此find
将分号视为与 相同的参数的一部分{}
。
您的第二个示例不起作用,因为分号被视为参数的一部分,就像-exec
它在引号内一样。此外,引号会-exec
尝试执行名为“ ”的程序grep eth0 myfile.ext
,将整个短语视为单个参数。以下应该有效:
# find . -exec grep eth0 {} \;
答案2
我找到了一个解决此问题的方法,但效果并不完全一样。您无法将搜索限制在文件名模式中,因此它会搜索二进制文件等垃圾文件。
# find . -name \*.sh -exec grep nycmesh_configure {}\;
find: -exec requires an argument
# grep -r nycmesh_configure * 2>/dev/null