I'm trying to open a file with vim from the command line, the file is in a directory filled with automatically generated files that are prepended with a time stamp. Since I don't know the time stamps off the top of my head, I would just like to open the most recent one in the directory (also the last one in the list alphabetically).
vim ./my_dir/<last_item>
Is there a way to do this?
Best Answer
This is really a job for zsh.
The bits in parentheses are glob qualifiers. The
*
before is a regular glob pattern, for example if you wanted to consider only log files you could use*.log
. Theo
glob qualifier changes the order in which the matches are sorted;om
means sort by modification time, most recent first. The[
glob qualifier means to only return some of the matches:[1]
returns the first match,[2,4]
return the next three,[-2,-1]
return the last two and so on. If the files have names that begin with their timestamp,*([1])
will suffice.In other shells, there's no good way to pick the most recent file. If your file names don't contain unprintable characters or newlines, you can use
If you want to pick the first or last file based on the name, there is a fully reliable and portable method, which is a bit verbose for the command line but perfectly serviceable in scripts.