小编典典

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

all

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

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

我想要以“b2”开头的最新文件。我如何在 bash 中做到这一点?我需要在我的~/.bash_profile脚本中有这个。


阅读 80

收藏
2022-09-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
2022-09-02