如何在具有特定扩展名的文件中查找特定文本?

如何在具有特定扩展名的文件中查找特定文本?

假设我正在搜索所有.log扩展名包含文本的文件abc

当搜索具有任何扩展名的文件时,看起来像(参考:https://unix.stackexchange.com/a/16140/38353

find / -xdev -type f -print0 | xargs -0 grep -H "abc"

我们如何修改它以便它只搜索带有.log扩展名的文件?

如果您能表现出更好的指挥能力,我会非常高兴。

答案1

总结

添加到命令-iname "*.log"后面。有关详细信息,请参阅手册页/find

更详细的答案

当前的任务如下:

  1. 列出与模式匹配的文件*.log
  2. 执行grep每个文件来查找它是否包含特定的字符串。
  3. 列出匹配的文件名stdout

如何实现这一点的示例如下:

$ find /var/log -iname "*.log" -exec grep -l 'wlan' {} \+                      

本质上有三件事在起作用:

  • findgrep执行查找文件和调用结构中每个文件名列表的任务-exec ...{} \+ ,其中{}将替换找到的所有文件名。
  • -iname "*.log"可以提供不区分大小写的文件名匹配
  • -exec . . .{} \+调用低级execve函数,该函数将生成grep -l在其前面找到的所有文件的列表(在 的位置{})。
  • 是指定打包 前面尽可能多的文件\+的选项(限制由变量设置,特定于,对于 Ubuntu 来说,为 ,如命令 所示)。一旦达到限制,将重复调用 ,并将更多文件打包为参数。有必要确保被解释为 的参数,而不是另一个 shell 命令。execvegrepARG_MAXexec2097152getconf ARG_MAXexecgrep\+find
  • 选项-l或 grep 显示具有匹配字符串的文件。-L将匹配没有字符串的文件。

相关内容