我该如何让Unix在所有文件中搜索字符串"hello"?
我已经尝试了以下方法,但是并没有成功:
sudo grep "hello" | find / -name "*" 2>/dev/null
有没有其他想法?
谢谢。
sudo cd / && grep -rn "hello" *
编辑:当然,'n'选项并不是必需的-它只是显示行号,我觉得很好。 'r'选项告诉grep在目录中执行递归搜索。
使用
grep -r 'pattern' /
grep
支持-r
(GNU grep
支持),如果不支持,请使用。find / -type f -exec grep 'pattern' {} +
find
支持带有+
的-exec
,否则请使用。find / -type f -printf '%p\0' | xargs -0 grep 'pattern'
find
支持-printf
,且您的xargs
支持-0
,或者find / -type f -print0 | xargs -0 grep 'pattern'
find
仅支持-print0
,而且您的xargs
支持-0
,则可以使用这种方式。在所有其他情况下,请回退到原始方式。find / -type f | xargs grep 'pattern'
这是最大程度的兼容性,但某些不寻常的文件名将无法被搜索到,并且制作恶意文件名可能会带来安全风险。
请注意,为了确保搜索所有文件,您必须以root身份运行,并且如果未添加-i
到grep
中,则搜索区分大小写。
find . -exec grep -H "hello" {} \;
cd
将使用sudo
执行并切换到“/”,但grep
不会作为sudo
的用户执行(也就是说,不是作为root执行)。其次,由于cd /
在另一个shell中,实际工作目录不会改变,因此grep
不会在“/”中运行(除非“/”已经是工作目录,如果是的话,为什么要cd
?)。第三,grep -r '' *
不会搜索所有文件,因为*
不会展开隐藏的文件和目录(以.
开头的文件和目录),除非启用shopt -s dotglob
(仅适用于bash
)。 - sorpigal