我使用fgrep -s 'text' /folder/*.txt
的返回值来查找'text'是否在任何 .txt 文件中< EM> /文件夹/ 。它有效,但我发现它对于我需要的东西来说太慢了,比如它在给我答案之前在所有文件中搜索'text'。
当我找到至少一个带有'text'的文件时,我需要一些快速给我一个是/否答案的东西。可能是一些awk脚本。
答案 0 :(得分:5)
如果我理解你的问题,你想要:
fgrep -m1
一场比赛后停止。
答案 1 :(得分:1)
如果是基于 mopoke 答案的类型,您可以使用它来缩短搜索范围。这会在找到它的第一个文件中的第一个匹配后停止:
# found=$(false)
found=1 # false
text="text"
for file in /folder/*.txt
do
if fgrep -m1 "$text" "$file" > /dev/null
then
found=$?
# echo "$text found in $file"
break
fi
done
# if [[ ! $found ]]
# then
# echo "$text not found"
# fi
echo $found # or use exit $found
修改:注释掉一些行并进行了其他一些更改。
如果文件数量很多,那么for
可能会失败,您应该使用while
循环并将find
传送到其中。
如果你想做的就是找出文件夹中是否有任何 .txt文件而不管文件的内容是什么,那么单独使用这样的东西:
find /folder -name "*.txt"
答案 2 :(得分:0)
基于上面的答案,我认为应该这样做吗?
find /folder -name \*.txt -exec grep "text" {}\;
但是我不确定我是否完全理解这个问题:'fgrep'是在开始输出之前进行全深度递归还是什么?该查找应报告as-it-found,因此可能更适合您的需求,dunno。
[编辑,未测试]:更改上面的'grep'以获取类似以下内容的shell脚本:
grep "text" && exit 0 || exit 1
要获得真正需要工作的错误(你需要解决这个问题,还没有完全按照这里的步骤进行测试 - 目前无法访问Unix :-()