如何跟踪(tail -f)目录中的最新文件(匹配模式)并使用参数作为别名调用

How to follow (tail -f) the latest file (matching a pattern) in a directory and call as alias with parameter

我有一个充满日志文件的目录,我想要一个 bash 单行命令来跟踪与模式(例如“logfile*”)匹配的最新日志文件。基本上我有一条线应该工作,只是它不...

tail -f $(ls -1rt logfile* | tail -n 1)

当我像这样只测试部分命令时

ls -1rt logfile* | tail -n 1
logfile_20210111_105242.log

它会给我我想要关注的最新日志文件名:

但添加 tail -f 我得到以下响应:

tail -f $(ls -1rt logfile* | tail -n 1)
tail: cannot open ''$'3''[0m'$'3''[00mlogfile_20210111_105242.log'$'3''[0m' for reading: No such file or directory

关于如何让它工作的任何想法?

编辑:另外,知道如何最好地在带参数的别名中使用它吗?大多数研究表明必须使用 .bashrc 中的函数,但我也发现有人说使用 !:1 作为变量应该是可能的。

EDIT2:解决方案

第 1 步:使用下面评论中的解决方案

tail -f $(find . -maxdepth 1 -name 'logfile*' -printf '%Ts/%f\n' | sort -n | tail -1 | cut -d/ -f2)

第 2 步:将其放入 .alias 并使其与文件模式的参数一起使用

alias tailf="tail -f $(find . -maxdepth 1 -name '\!:1' -printf '%Ts/%f\n' | sort -n | tail -1 | cut -d/ -f2)"

EDIT3:虽然别名似乎有效,但不幸的是,它会跟踪所有匹配作为参数传递的模式的文件。当我在别名定义中对模式进行硬编码时,它可以完美地工作,只需拖尾匹配该模式的最新文件即可。

谢谢

tail -f "$(find . -maxdepth 1 -name "logfile*" -printf "%Ts/%f\n" | sort -n | tail -1 | cut -d/ -f2)"

跟踪查找命令的结果。在当前目录中搜索以 logfile 为前缀的文件,并打印创建的纪元时间以及文件路径和名称,用正斜杠分隔通过管道进行排序,然后在剥离之前使用 tail -1 打印最新条目只留下带有 cut.

的文件路径