Linux下快速选定当前目录的最新文件

场景描述

在某些场景下,会有一个目录下有很多名字前缀一样,后边有很多文件名类似的情况。
例如:
一个存储日志的路径下可能会是这样的(有简化):

1
2
3
4
5
$ ll 
2015-12-16 10:35:02 log_20151216103502.txt
2015-12-16 10:35:05 log_20151216103505.txt
2015-12-16 10:35:09 log_20151216103509.txt
2015-12-16 10:35:11 log_20151216103511.txt

有很多前缀一致的文件,尾部以时间戳区分,这些文件名只是最后两位不一样


假设我们想查看最新的一个文件log_20151216103511.txt的内容,如果直接用:
cat log_ + TAB,系统会帮我们补为:

1
2
$ cat log_201512161035
log_20151216103502.txt log_20151216103505.txt log_20151216103509.txt log_20151216103511.txt

最后两位需要自己补全


解决办法

这里,提供一种方法,对这一步骤进行简化。
##效果
输入lastfile命令,即可显示最新文件的文件名:

1
2
$lastfile log_
log_20151216103511.txt

配合cat,查看文件:

1
2
$cat `lastfile log_`  
This is the content of log_20151216103511.txt

实现方法

1.编写shell脚本文件lastfile

1
ls -t | grep "$1" | head -n 1

2.将lastfile添加可执行权限,并放入系统path(例如/usr/local/bin).

脚本解析

ls -t | grep "$1" | head -n 1 分一下三个步骤:

  • ls -t:
    按时间排序,最新的文件在第一个。
  • grep "$1" :
    过滤输入的字符串,例如本例中为log_.如果不输入的话,默认为空,表示所有文件。
  • head -n 1:
    返回所有符合规则的文件中的第一条(即最新)。