传递文件作为参数

时间:2020-08-04 20:51:31

标签: bash

研究员,我有一个.sh创建一个file.log,在这个文件中,我搜索了许多git日志,这些日志是从用户过去的日期范围中搜索出来的(只是为了解释其含义)。 现在,我需要使用这个外部程序提供的file.log并使用以下代码:

find ./* -type f -exec grep -l 'a1009206_vcr' {} \; > file.log

我的问题是我该怎么做?

1 个答案:

答案 0 :(得分:0)

忽略丢失/不可读的文件时使用Grep进行递归

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关于符号链接的默认行为(带有或不带有递归)。