一尘不染

Bash函数查找最新的文件匹配模式

linux

在Bash中,我想创建一个函数,该函数返回与特定模式匹配的最新文件的文件名。例如,我有一个文件目录,例如:

Directory/
   a1.1_5_1
   a1.2_1_4
   b2.1_0
   b2.2_3_4
   b2.3_2_0

我想要以“ b2”开头的最新文件。我该怎么做呢?我需要在~/.bash_profile脚本中包含它。


阅读 221

收藏
2020-06-02

共1个答案

一尘不染

ls命令具有-t按时间排序的参数。然后,您可以使用抓取第一个(最新的)head -1

ls -t b2* | head -1

但请注意:为什么不应该解析ls的输出

我个人的看法:ls仅当文件名包含空格或换行符之类的有趣字符时,解析才是危险的。如果可以保证文件名不会包含有趣的字符,则解析ls是非常安全的。

如果您正在开发一个脚本,该脚本打算在许多不同情况下在许多系统上由许多人运行,那么我非常建议您不要解析ls

这是“正确”的操作方法:如何在目录中找到最新(最新,最早,最旧)文件?

unset -v latest
for file in "$dir"/*; do
  [[ $file -nt $latest ]] && latest=$file
done
2020-06-02