我是 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
在此列表中进行匹配,而不是在文件内容中进行匹配!
您需要使用find
with -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
抑制错误消息