Shell

訪問(按字母順序排序)目錄中的最新文件

  • October 5, 2020

我正在嘗試從命令行使用 vim 打開一個文件,該文件位於一個目錄中,該目錄中填充了自動生成的文件,這些文件前面帶有時間戳。由於我不知道我頭頂上的時間戳,我只想打開目錄中最新的時間戳(也是列表中按字母順序排列的最後一個)。

vim ./my_dir/<last_item>

有沒有辦法做到這一點?

這確實是 zsh 的工作。

vim my_dir/*(om[1])

括號中的位是glob 限定符。before 是正常的*glob 模式,例如,如果您只想考慮可以使用的日誌文件*.log。glob 限定符改變匹配的o排序順序;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=\${$#}"

引用自:https://unix.stackexchange.com/questions/26437