尾部匹配所选规则的最新文件

时间:2013-03-19 05:03:01

标签: linux bash

有一个多个进程记录到的目录,我想拖尾所选进程的最新文件。

在〜/ bashrc中

我添加了以下内容

function __taillog {

        tail -f $(find $1 -maxdepth 1 -type f -printf "%T@ %p\n" | sort -n | tail -n 1 | cut -d' ' -f 2-)
}

alias taillog='__taillog'

取自:https://superuser.com/questions/117596/how-to-tail-the-latest-file-in-a-directory

日志文件目录的示例

-rw-r--r-- 1 genesys genesys   2284 Mar 19 16:34 gdalog.20130319_163436_906.log
-rw-r--r-- 1 genesys genesys 131072 Mar 19 16:34 gdalog.20130319_163436_906.snapshot.log
-rw-r--r-- 1 genesys genesys  10517 Mar 19 16:54 lcalog.20130319_163332_719.log
-rw-r--r-- 1 genesys genesys 131072 Mar 19 16:54 lcalog.20130319_163332_719.snapshot.log
-rw-r--r-- 1 genesys genesys   3792 Mar 19 16:37 StatServer_TLSTest.20130319_163700_703.log
-rw-r--r-- 1 genesys genesys 160562 Mar 19 16:52 StatServer_TLSTest.20130319_163712_045.log
-rw-r--r-- 1 genesys genesys  49730 Mar 19 16:54 StatServer_TLSTest.20130319_165217_402.log
-rw-r--r-- 1 genesys genesys  53960 Mar 20 09:55 StatServer_TLSTest.20130319_165423_702.log
-rw-r--r-- 1 genesys genesys 131072 Mar 20 09:56 StatServer_TLSTest.20130319_165423_702.snapshot.log

因此,要使所有StatServer的命令都是

taillog /home/user/logs/StatServer*

它会在给定路径中为该应用程序添加最新文件

问题是尾部显示一些文件输出,但在附加日志文件时不显示任何更新。如果运行以下命令,则日志正确拖尾

tail -f $(find /home/user/logs/StatServer*  -maxdepth 1 -type f -printf "%T@ %p\n" | sort -n | tail -n 1 | cut -d' ' -f 2-)

有些如何将此命令添加为bash函数然后从别名调用它会导致它无法按预期运行。

欢迎任何关于更好方式的建议。

2 个答案:

答案 0 :(得分:1)

我相信你应该运行这个命令:

taillog /home/user/logs

当您说/home/user/logs/this_app*时,您将所有与模式匹配的文件作为参数传递给taillog,并且仅使用第一个参数即$1,并且该命令最终转换为{ {1}}。

tail -f $1应该是$1应该在该目录级别查找文件的目录(例如,在您的情况下为find),然后将结果传递给/home/user/logssorttail

答案 1 :(得分:0)

我在linux / bash上运行你的taillog函数没有任何问题。也许日志输出是缓冲的,所以不会立即写入更改?您可以尝试关闭此StatServer的[log]缓冲选项。