In Bash, I would like to create a function that returns the filename of the newest file that matches a certain pattern. For example, I have a directory of files like:
Directory/
a1.1_5_1
a1.2_1_4
b2.1_0
b2.2_3_4
b2.3_2_0
I want the newest file that starts with 'b2'. How do I do this in bash? I need to have this in my ~/.bash_profile
script.
ベストアンサー1
The ls
command has a parameter -t
to sort by time. You can then grab the first (newest) with head -1
.
ls -t b2* | head -1
But beware: Why you shouldn't parse the output of ls
My personal opinion: parsing ls
is dangerous when the filenames can contain funny characters like spaces or newlines.
If you can guarantee that the filenames will not contain funny characters (maybe because you are in control of how the files are generated) then parsing ls
is quite safe.
If you are developing a script which is meant to be run by many people on many systems in many different situations then do not parse ls
.
Here is how to do it safe:
unset -v latest
for file in "$dir"/*; do
[[ $file -nt $latest ]] && latest=$file
done
for more explanation read How can I find the latest (newest, earliest, oldest) file in a directory?
also What is the difference between test, single square bracket and double square bracket ?