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



我有一个满是日志文件的目录,我希望使用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 ''$'33''[0m'$'33''[00mlogfile_20210111_105242.log'$'33''[0m' for reading: No such file or directory

关于如何让它发挥作用,有什么想法吗?

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

第2版:解决方案

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

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

步骤2:将其放入.alias中,并使其与文件模式的参数一起工作

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

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

感谢

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

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

最新更新