305

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

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

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

4

5 回答 5

302

grep $PATTERN *就足够了。默认情况下,grep 会跳过所有子目录。但是,如果你想通过它们 grep,grep -r $PATTERN *就是这样。

于 2013-03-08T05:35:59.240 回答
285

在 Linux 中,我通常使用此命令递归地grep处理目录中的特定文本:

grep -rni "string" *

在哪里

  • r= 递归,即在当前目录中搜索子目录
  • n= 将行号打印到stdout
  • i= 不区分大小写的搜索
于 2013-03-08T05:33:38.493 回答
43

使用查找。说真的,这是最好的方法,因为这样你就可以真正看到它正在运行的文件:

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

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

于 2015-02-04T19:19:55.393 回答
18

要搜索所有子目录,但仅限特定文件类型,请使用 grep 和--include.

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

grep "text to search" -r . --include=*.{yml,yaml}
于 2019-12-05T09:00:47.200 回答
1

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

for I in `ls *.sql`
do
    grep "foo" $I >> foo.log
    grep "bar" $I >> bar.log
done
于 2015-02-04T19:31:17.147 回答