在Red Hat Enterprise 6中长时间列出后,我在一个名为path/to/directory
的目录中有几个日志文件,它们的格式如下:
-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
自动使它tac
(最近修改的文件)和grep
(从日志文件的末尾起反方向),从而使其运行得更快。这可能吗?
我遇到的问题是/path/to/directory
中总是有多个日志文件,而我无法让Linux自动tac
修改最近的文件。任何帮助将不胜感激。
我尝试过:
tac /path/to/directory/logfile_$(date +%Y%m%d)*.log
这将tac
一个在当前日期创建的文件,但是我遇到问题的部分是在最新文件上使用tac
(通过YYYYMMDD和HHMMSS),因为可以生成多个文件在同一日期,但其中只有一个可以是最新的,而最新的日志文件是我关心的唯一文件。我也不能使用符号链接。限制,叹气。
答案 0 :(得分:1)
您似乎在问题中表达的问题与tac
无关,而是..如何选择目录中一组可预测名称的文件中的最新文件。
如果文件名确实采用logfile_YYYYDDMM_HHMMSS.log
格式,则它们将按词法排序,而无需先天了解日期。因此,如果您的外壳是bash,则可能:
shopt -s nullglob
for x in /path/to/logfile_*.log; do
[[ "$x" > "$file" ]] && file="$x"
done
nullglob
选项告诉bash扩展一个不匹配文件的glob,而不是null而不是文字字符串。按照上面的代码,您可能需要先检查$hit
的存在,然后再将其提供给tac
。