使用 find 查找具有特定名称和内容的文件

使用 find 查找具有特定名称和内容的文件

我是 Linux 新手。我试图找到一个名为 的文件start.sh,开始搜索/并抑制任何错误。同时,该文件还应该包含一个名为sys_home.

请告诉我这是否正确:

find / -name start.sh | grep "sys_home" *

答案1

如果您通过管道 ( |) 到grep,它会从 读取stdin,因此您不需要添加该文件名参数 ( *):

find / -name start.sh | grep "sys_home"

然而,这不会像你期望的那样工作!find将输出一个名称列表,您grep将尝试sys_home在此列表中进行匹配,而不是在文件内容中进行匹配!


您需要使用findwith -exec(替代xargs):

find / -name 'start.sh' -exec grep -q 'sys_home' {} \; -print

添加2>/dev/null以抑制错误消息

find / -name 'start.sh' -exec grep -q 'sys_home' {} \; -print 2>/dev/null

作为替代方案,您也可以直接使用grep递归模式(r),我认为这更容易:

grep -rls 'sys_home' --include='start.sh' /
  • -r递归模式
  • --include='start.sh'仅查找与 glob 模式匹配的文件start.sh
  • -l只打印文件名,不打印匹配行
  • -s抑制错误消息

相关内容