awk 不会搜索子目录中的文件?

awk 不会搜索子目录中的文件?

我试图使用 awk 在多个文件中搜索特定字符串,但它返回

'Example' is a directory: skipped.

如何使用 awk 搜索所有子目录和文件?

使用示例,

awk -F: '$3 ~ /example/' * > C:/out.txt

答案1

这是 shell 通配符的问题,而不是awk.为了递归地进行 glob,您需要启用 bashglobstar选项。

shopt -s globstar

环球星

如果设置,路径名扩展上下文中使用的模式 ** 将匹配所有文件以及零个或多个目录和子目录。如果模式后跟 /,则仅目录和子目录匹配。

那么你就能够:

awk -F: '$3 ~ /example/' ** > C:/out.txt

请注意,您仍然会收到有关目录本身被跳过的错误,但它也会递归到该目录中。您可以通过将 stderr 重定向到 /dev/null 来隐藏错误

awk -F: '$3 ~ /example/' ** > C:/out.txt 2>/dev/null

答案2

我建议您find结合使用awk

find -type f -exec awk -F: '$3 ~ /example/' {} > c:/out.txt \;

笔记: find不是 的简单替代品*,正如下面的评论中正确指出的那样。您可能需要调整find参数以便准确返回您正在查找的文件集。

笔记:仍然需要一个>(与 相对>>),因为它是find的输出被重定向。

笔记:如果你正在使用cmder,你应该小心调用 GNU find 而不是 Windows 的 findfind.exe。看这里寻找克服这种歧义的方法。

相关内容