我想对日志目录中的less -F
一个二进制文件的最新更新的日志文件(创建名称以 开头的日志)运行命令。xtest*
我能够在 中创建以下别名csh
,但我认为我可以改进这一点。
find $LOG/tr/`date +"%Y%m%d"` -name xtest\* -print | xargs ls -rt | tail -1 | xargs less -F
答案1
既然您正在 cshell 中工作,那么您就会知道别名应该只在一行中定义。因此显示的别名超出了正常的线路长度。这就是适合你的 cshell。
alias latest_log 'find "$LOG/tr/`date +%Y%m%d`" -name "xtest*" -printf "%Ts\t%p\0" | sort -z -k 1,1nr -k 2 | head -z -n 1 | cut -z -f2 | xargs -0 less -F'
将其分成几块以显示它正在做什么:
find
命令打印以 null 分隔的文件名以及数字时间戳和文件名。请注意,命令中的引号date
已被删除,因为date
没有它们也可以很好地运行,再加上它们会使别名不必要地使用引号。- 然后,以 null (
\0
) 分隔的双组(时间戳 TAB 文件名)从第一个字段开始以反向数字方式排序,到第二个字段结束。命令-z
中的选项是sort
分隔空字符周围的输入块,而不是默认的换行符。 - 按照正确的顺序排序后,我们取出最上面的块,该块将通过命令保存具有最新时间戳的文件名
head -z -n 1
。 - 然后该
cut
命令接管并删除时间戳,因为它的工作现在已经完成并且不再需要它。我们使用该-z
选项来处理 的空分隔输入cut
。该-f2
选项应将其扔到filename + \0
下一个管道。 xargs -0
将读取由 null 分隔的文件名并将文件名传递到less -F
其命令行上。