我需要对文件系统中的多个文件进行搜索以查找字符串“RUSH2112”。我已完成以下命令,但我不确定这是否正确。我站在已安装的文件系统中。
find . -type f -exec grep -i1 "Rush2112" {} \;
答案1
寻找一个细绳(不是正则表达式)不关心大小写,使用grep -iF STRING
(whereSTRING
应该是您要查找的带引号的字符串)。
要递归目录层次结构中的所有常规文件,请执行以下操作
find . -type f -exec grep -iF STRING /dev/null {} +
此命令与您的命令之间的主要区别在于,它将grep
针对找到的文件组执行。您的命令将为grep
每个找到的文件运行一次,如果文件很多,则速度可能会较慢。这是+
最后造成这种差异的原因。
另一区别是,由于grep
使用多个文件调用,因此其输出将包含找到匹配项的文件的路径名。在/dev/null
那里力量grep
如果碰巧仅使用单个文件调用此行为。如果您的实现具有非标准(但常见)选项,则可以使用grep
's-H
选项而不是包含。/dev/null
grep
的某些实现grep
还可以选择自行递归目录,而无需借助find
.这通常通过一个-R
选项来完成:
grep -R -iF STRING .
请注意,GNUgrep
还有一个-r
与其选项略有不同的选项-R
(使用 时-r
,不会遵循符号链接,这将更接近地模仿通过 运行时获得的行为grep
)find . -type f
。
如果您要查找的只是包含该字符串的文件的路径名,而不一定是那些匹配的文件中的实际行,那么您可以通过多种不同的方式来执行此操作(所有方式都与上面提到的方式类似) )。
用作
grep -q
每个文件的测试:find . -type f -exec grep -qiF STRING {} ';' -print
grep -l
跨通过以下方式找到的文件组使用find
:find . -type f -exec grep -ilF STRING {} +
使用递归
grep -l
:grep -R -ilF STRING .
如果您想进一步处理包含给定字符串的文件,那么我会选择第一个替代方案:
find . -type f -exec grep -qiF STRING {} ';' -exec sh -c '
for pathname do
# Process "$pathname" here
done' sh {} +
或者,grep
在内联脚本内部进行操作:
find . -type f -exec sh -c '
for pathname do
if grep -qiF STRING "$pathname"; then
# Process "$pathname" here
fi
done' sh {} +
有关的: