linux - 如何跟踪(tail -f)目录中的最新文件(匹配模式)并作为带参数的别名调用
问题描述
我有一个充满日志文件的目录,我想要一个 bash oneline 命令来跟踪与模式匹配的最新日志文件(例如“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 ''$'\033''[0m'$'\033''[00mlogfile_20210111_105242.log'$'\033''[0m' for reading: No such file or directory
关于如何让它发挥作用的任何想法?
编辑:另外,知道如何最好地在带有参数的别名中使用它吗?大多数研究表明.bashrc
必须使用一个函数,但我也发现有人说它应该可以通过!:1
用作变量来实现。
EDIT2:解决方案
Step1:使用下面评论中的解决方案
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)"
跟踪 find 命令的结果。在当前目录中搜索以 logfile 为前缀的文件,并打印创建的纪元时间以及文件路径和名称,用正斜杠分隔 通过管道将其排序,然后打印带有 tail -1 的最新条目,然后剥离到只保留带有剪切的文件路径。
推荐阅读
- python - Python/Flask:有没有办法生成密码提示而不是制作整个用户平台?
- python - Unity POST 到本地主机的请求
- sql - 索引是否会影响 where is not null 查询的性能?
- react-native - undefined 不是对象(评估 '_expo.default.Localization.locale')
- python - IBM 语音转文本用户名和密码问题
- javascript - XMLHttpRequest:如何导航“链接”标头
- spring - 使用 Spring 配置从 Spring 连接到 WebSphere MQ
- python - 无法解决 LinAlgError:数组的最后 2 个维度必须是正方形
- c# - 多个级别的等效名称
- arrays - 文件的读写