我正在尝试使用一个简单的脚本来查看特定字符串的所有.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文件?
答案 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)