如何改进以下别名?

如何改进以下别名?

我想对日志目录中的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其命令行上。

相关内容