我正在尝试在硬盘上的某个文件中查找特定的文本字符串。到目前为止,我能想到的最好的方法是:
find -type f / | xargs cat | grep "string to find"
但这只是告诉我该字符串是否存在于某处。
我怎么知道在哪个文件里找到了它?
有没有更好的办法?
答案1
find / -type f -exec grep "string" {} +
这将执行不区分大小写的搜索,虽然速度较慢,但更灵活:
find / -type f -exec grep -i "string" {} +
您可能会获得很多结果,因此您可以将其通过管道传输到 less,然后使用f和b在输出中逐页向前和向后导航:
find / -type f -exec grep -i "string" {} + | less
如果你知道你正在寻找*.txt
文件,你可以进一步细化它:
find / -type f -name "*.txt" -exec grep -i "string" {} + | less
答案2
这应该可以解决问题并且简单得多:
grep -R "some string" /
添加 -n 将显示您需要的行号:
grep -Rn "some string" /
答案3
在这种情况下为什么要使用“cat”?我总是觉得人们毫无理由地使用“cat”很奇怪。只需这样做:
find -type f / | xargs grep "string to find"
当然,搜索整个磁盘上的每个文件会非常慢。如果你发现自己经常需要进行这样的搜索,那么最好使用某种索引程序。例如比格犬是一个相当全面的搜索引擎,它已经存在一段时间了。其他选项包括KDE 的 Strigi或者Google 的桌面搜索
至少,你应该使用“locate”而不是“find”,它只索引文件名而不是其内容,但这仍然可以加快速度。此外,在使用 grep 之前,你应该根据文件类型进行过滤。例如,对 100MB 的 avi 文件或其他文件使用 grep 只是浪费时间。
答案4
我怎么知道在哪个文件里找到了它?
您需要使用-H
带有“ ”的“ grep
”选项来打印匹配的文件。
还,
/
使用比根 (' ')稍微好一点的猜测也是一个好主意。John
当你搜索大量文件时,-exec
切换 ' ' 操作符的方案会有所帮助|