访问(按字母顺序排序)目录中的最新文件

访问(按字母顺序排序)目录中的最新文件

我正在尝试从命令行使用 vim 打开一个文件,该文件位于一个充满自动生成的文件的目录中,这些文件前面带有时间戳。由于我不知道脑海中的时间戳,因此我只想打开目录中的最新一个(也是按字母顺序排列的列表中的最后一个)。

vim ./my_dir/<last_item>

有没有办法做到这一点?

答案1

这确实是 zsh 的工作。

vim my_dir/*(om[1])

括号中的位是全局限定符。之前*是常规的 glob 模式,例如,如果您只想考虑日志文件,则可以使用*.log. globo限定符改变匹配的排序顺序;om意思是按照修改时间排序,最新的排在前面。 glob[限定符意味着仅返回部分匹配项:[1]返回第一个匹配项,[2,4]返回接下来的三个匹配项,[-2,-1]返回最后两个匹配项,依此类推。如果文件的名称以时间戳开头,*([1])就足够了。

在其他 shell 中,没有好的方法来选择最新的文件。如果您的文件名不包含不可打印的字符或换行符,您可以使用

vim "$(ls -t mydir | head -n 1)"

如果您想根据名称选择第一个或最后一个文件,有一个完全可靠且可移植的方法,该方法对于命令行来说有点冗长,但在脚本中完全可用。

set -- mydir/*
first_file_name=$1
eval "last_file_name=\${$#}"

答案2

如果您在 my_dir 内:

vim $(ls -rt | tail -1)

答案3

这对我有用:

$ ls -rt | tail -1 | xargs vim

但是您可能有一个目录作为最后一个条目,在这种情况下您可能需要过滤目录:

$ ls -rt | grep -v "^d" | tail -1 | xargs vim

答案4

我猜你正在寻找这个。

[centos@centos temp]$ for i in `seq 100`; do touch $i; done

[centos@centos temp]$ ls -t1 | head -1
100


[centos@centos temp]$ vim /.my_dir/$(ls -t1  | head -1)

但排序完全取决于您的文件名。

相关内容