grep - 限制读取的文件数

时间:2016-12-30 20:23:08

标签: linux bash grep

我有一个包含超过100,000个文件的目录。我想知道字符串Card是否作为任何这些文件内容的一部分存在。

命令: Deck读取所有文件时耗时太长。

如果发现匹配,我如何要求"str1"停止阅读任何其他文件?任何一个班轮?

注意:我已尝试过grep -l 'str1' *,但该命令所需的时间与前一次相同。

2 个答案:

答案 0 :(得分:5)

在命令args中命名100,000个文件名会导致问题。它可能超过了shell命令行的大小。

但是,如果您只使用文件所在目录的名称来使用递归选项,则不必命名所有文件(如果要搜索当前文件,则为.目录):

grep -l -r 'str1' . | head -1

答案 1 :(得分:3)

使用grep -m 1以便在找到文件中的第一个匹配项后grep停止。它对于大型文本文件非常有效。

grep -m 1 str1 * /dev/null | head -1

如果有一个文件,那么上面的/ dev / null确保grep确实在输出中打印出文件名。

如果您想在任何文件中找到第一场比赛后停止:

for file in *; do
  if grep -q -m 1 str1 "$file"; then
    echo "$file"
    break
  fi
done

当您拥有包含大量文件的目录时,for循环还可以使您免于too many arguments问题。

相关问题