如何对目录下的所有文件进行grep操作?

使用xenserver,我想对目录中的每个文件执行一个命令,从命令的输出中获取一些内容并将其追加到一个文件中。

我清楚我想使用的命令,以及如何根据需要grep出字符串。

但我不清楚的是,我如何让它对每个文件执行这个命令,转到下一个文件,直到没有更多的文件被找到。

533220 次浏览

在Linux中,我通常使用这个命令递归地grep用于目录中的特定文本:

grep -rni "string" *

在哪里

  • r =递归,即搜索当前目录中的子目录
  • n =将行号打印到stdout
  • i =不区分大小写搜索

grep $PATTERN *就足够了。默认情况下,grep将跳过所有子目录。然而,如果你想要grep遍历它们,grep -r $PATTERN *就是这种情况。

使用find。说真的,这是最好的方法,因为这样你就可以真正看到它正在操作哪些文件:

find . -name "*.sql" -exec grep -H "slow" {} \;

注意,-H是mac特定的,它在结果中显示文件名。

如果你想执行多个命令,你可以使用:

for I in `ls *.sql`
do
grep "foo" $I >> foo.log
grep "bar" $I >> bar.log
done

要在所有子目录中搜索,但只在特定的文件类型中,使用grep和--include

例如,在当前目录中递归搜索*中的文本。Yml和*。yaml:

grep "text to search" -r . --include=*.{yml,yaml}