研究员,我有一个.sh创建一个file.log,在这个文件中,我搜索了许多git日志,这些日志是从用户过去的日期范围中搜索出来的(只是为了解释其含义)。 现在,我需要使用这个外部程序提供的file.log并使用以下代码:
find ./* -type f -exec grep -l 'a1009206_vcr' {} \; > file.log
我的问题是我该怎么做?
答案 0 :(得分:0)
BSD和GNU grep实用程序的选项可以在许多情况下为您省去使用 find , xargs ,等的麻烦。 。这就是其中之一。例如:
grep -Flrs "a1009206_vcr" . > file.log
这使用以下标志:
-F, --fixed-strings
将模式解释为一组固定的字符串(即,将grep强制为 表现为fgrep)。
-l, --files-with-matches
仅将包含选定行的文件名写入 标准输出。 grep只会搜索文件,直到匹配 被发现,使搜索的潜在成本降低。路径- 每个文件搜索一次列出名称。如果是标准输入 搜索后,将写入字符串``(standard input)''。
-R, -r, --recursive
递归搜索列出的子目录。
-s, --no-messages
静音模式。不存在且不可读的文件将被忽略(即 他们的错误消息被抑制了。)
向下遍历当前的工作目录(例如.
或$PWD
,并写入与 file.log 匹配的文件名列表。 -s
标志可防止权限错误或其他杂物使您的输出文件混乱。如果您愿意,也可以使用2>&-
关闭标准错误。
上述应该在大多数情况下都可以使用,但是如果要递归并且不想遵循某些规则,则可能还需要添加-O
或-p
或您所有的符号链接。手册页详细介绍了grep关于符号链接的默认行为(带有或不带有递归)。