Este é realmente um trabalho para zsh.
vim my_dir/*(om[1])
Os bits entre parênteses são qualificadores da glob. O *
before é um padrão regular de glob, por exemplo, se você quisesse considerar apenas os arquivos de log, você poderia usar *.log
. O qualificador o
glob altera a ordem em que as correspondências são classificadas; om
significa classificar por hora de modificação, mais recente primeiro. O qualificador [
glob significa retornar apenas algumas das correspondências: [1]
retorna a primeira correspondência, [2,4]
retorna as próximas três, [-2,-1]
retorna as duas últimas e assim por diante. Se os arquivos tiverem nomes que começam com seu registro de data e hora, *([1])
será suficiente.
Em outros shells, não há uma boa maneira de escolher o arquivo mais recente. Se os nomes dos seus arquivos não contiverem caracteres não imprimíveis ou novas linhas, você poderá usar
vim "$(ls -t mydir | head -n 1)"
Se você quiser escolher o primeiro ou o último arquivo com base no nome, há um método totalmente confiável e portátil, que é um pouco detalhado para a linha de comando, mas que pode ser reparado em scripts.
set -- mydir/*
first_file_name=$1
eval "last_file_name=\${$#}"