Lee*_*lla 6 command-line shell wildcards timestamps files
我正在尝试从命令行使用 vim 打开一个文件,该文件位于一个充满自动生成的文件的目录中,这些文件前面带有时间戳。由于我不知道脑海中的时间戳,因此我只想打开目录中的最新一个(也是按字母顺序排列的列表中的最后一个)。
vim ./my_dir/<last_item>
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
这确实是 zsh 的工作。
vim my_dir/*(om[1])
Run Code Online (Sandbox Code Playgroud)
括号中的位是全局限定符。之前*是常规的 glob 模式,例如,如果您只想考虑日志文件,则可以使用*.log. globo限定符改变匹配的排序顺序;om意思是按照修改时间排序,最新的排在前面。glob[限定符意味着仅返回部分匹配项:[1]返回第一个匹配项,[2,4]返回接下来的三个匹配项,[-2,-1]返回最后两个匹配项,依此类推。如果文件的名称以时间戳开头,*([1])就足够了。
在其他 shell 中,没有好的方法来选择最新的文件。如果您的文件名不包含不可打印的字符或换行符,您可以使用
vim "$(ls -t mydir | head -n 1)"
Run Code Online (Sandbox Code Playgroud)
如果您想根据名称选择第一个或最后一个文件,有一个完全可靠且可移植的方法,该方法对于命令行来说有点冗长,但在脚本中完全可用。
set -- mydir/*
first_file_name=$1
eval "last_file_name=\${$#}"
Run Code Online (Sandbox Code Playgroud)