在所有子文件夹中尾部日志文件

时间:2016-01-23 01:46:38

标签: linux shell tail

我正在尝试使用一个简单的脚本来查看特定字符串的所有.log文件和greps,并根据其值发送一封电子邮件。

tail -f **/*.log | while read LOGLINE

do 
        [[ "${LOGLINE}" == *"complete!"* ]] && pkill -P $$ tail | 
                echo "LOG" | mutt -s "Test Passed!" abc@xyz.com

        [[ "${LOGLINE}" == *"FAILURE"* ]] && pkill -P $$ tail | 
                echo "LOG" | mutt -s "Test Failed!" abc@xyz.com

done

然而,这给了我以下结果:

tail: cannot open `**/*.log' for reading: No such file or directory
tail: no files remaining

如果我提供确切的路径,脚本工作正常。 如何使这个工作适用于父文件夹和所有子文件夹中的所有.log文件?

1 个答案:

答案 0 :(得分:1)

在我的bash shell中,默认情况下globstar选项处于关闭状态。您可以使用

启用它
    shopt -s globstar

这应该允许**/*.log扩展到所有子目录。另见this article。看看是否找到了.log文件。

注意:此功能是在bash 4.0中引入的。如果您使用的是旧版本,这可以解释为什么代码无效(您的shell没有该功能)。

另一种方法是使用find。将**/*.log替换为$(find . -name '*.log'),以便该行显示

    tail -f $(find . -name '*.log') | while read LOGLINE

例如,如果您没有某些子目录的权限,它也可以提供错误消息,这些消息将转到 stderr (文件2)。您可以使用重定向删除它们

    $(find . -name '*.log' 2>/dev/null)