如何跟踪(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.
的文件路径
我有一个充满日志文件的目录,我想要一个 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.
的文件路径