如何在 Bash shell 中使用 find 为每个文件执行命令?

如何在 Bash shell 中使用 find 为每个文件执行命令?

我尝试了以下操作,该操作在 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

相关内容