【问题标题】:Using tac on most recent log file out of several log files in a directory在目录中的多个日志文件中对最近的日志文件使用 tac
【发布时间】:2019-03-05 18:31:18
【问题描述】:

我在一个名为path/to/directory 的目录中有几个日志文件,它们在 Red Hat Enterprise 6 中长期列出后采用以下格式:

-rw-r——-. 1 root root 17096 Sep 30 11:00 logfile_YYYYDDMM_HHMMSS.log

每天都会生成几个这样的日志文件。我需要自动tac 最近修改的文件,而无需输入日志文件的确切名称。例如,我想做:

tac /path/to/directory/logile*.log | grep -m 1 keyword

它会自动将最近修改的文件tacgrep 关键字从日志文件末尾的相反方向设置为运行得更快。这可能吗?

我遇到的问题是/path/to/directory 中总是有多个日志文件,并且我无法让 Linux 自动生成最近修改的文件 tac。任何帮助将不胜感激。

我试过了:

tac /path/to/directory/logfile_$(date +%Y%m%d)*.log 

这将tac在当前日期创建一个文件,但我遇到问题的部分是在最新文件(由 YYYYMMDD 和 HHMMSS)上使用tac,因为可以在同一日期生成多个文件但其中只有一个可以是最新的,而最新的日志文件是我唯一关心的一个。我也不能使用符号链接.. 限制,叹息。

【问题讨论】:

  • 不是答案,但这里有一些获取最新文件名的示例:stackoverflow.com/questions/1015678/…ls -ABt1 | head -n1 似乎是您尝试做的最佳选择)。那么我猜你可以使用awk 或类似的东西来调用takgrep
  • @DaveyDaveDave,注意通常是bad idea to parse ls...
  • 非常感谢。我相信您提供的指导是我遇到的问题的答案。它有效。

标签: tac


【解决方案1】:

您似乎在问题中表达的问题不是tac,而是..如何选择目录中一组可预测命名的文件中的最新文件。

如果您的文件名确实是logfile_YYYYDDMM_HHMMSS.log 格式,那么它们将按词法排序,而不需要对日期有先天的理解。因此,如果你的 shell 是 bash,你可能会:

shopt -s nullglob
for x in /path/to/logfile_*.log; do
  [[ "$x" > "$file" ]] && file="$x"
done

nullglob 选项告诉 bash 将不匹配文件的 glob 扩展为 null 而不是文字字符串。按照上面的代码,您可能希望在将 $hit 提供给 tac 之前测试它是否存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 2015-09-09
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多