我正在尝试从命令行使用 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)
但排序完全取决于您的文件名。