Shell - 查找与给定模式匹配的最新文件

Shell - 查找与给定模式匹配的最新文件

我有以下文件。

root@VMBOX:/client# ls -lrt /client/*/ver* /client/*/*/ver*  
-rw-r--r-- 1 root root 0 Jul  5 18:54 /client/folder299/version_1
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder299/ifolder/version_a
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder300/ifolder1/version_b
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder301/ifolder2/version_c
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder302/ifolder3/version_d
-rw-r--r-- 1 root root 0 Jul 19 13:35 /client/folder300/version_2
-rw-r--r-- 1 root root 0 Jul 19 13:35 /client/folder301/version_3
-rw-r--r-- 1 root root 0 Jul 19 13:36 /client/folder302/version_4

我正在尝试获取与 ID 匹配的模式的最新版本文件。示例如下所示。

root@VMBOX:/client# ls -lrt /client/*/ver* /client/*/*/ver*   | grep 299
-rw-r--r-- 1 root root 0 Jul  5 18:54 /client/folder299/version_1
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder299/ifolder/version_a

最新版本是上例中的 version_a。

root@VMBOX:/client# ls -lrt /client/*/ver* /client/*/*/ver*   | grep 299 | tail -1
-rw-r--r-- 1 root root 0 Jul  5 18:58 /client/ifolder299/ifolder/version_a

我被告知这种方法不好找到文件(为什么*不*解析`ls`?)并且正在寻找一种替代方法,例如https://stackoverflow.com/a/26766782/9316558。如果有不清楚的地方,请告诉我。

更新:

从下面 Jasen 的回答中,我可以获取路径 /client 中的最新文件

find /client -path "*299*" -printf "%T@ %P\n" | sort -n | tail -1

但是,上述命令给出了最新的文件。我正在寻找最新版本的文件。

答案1

你可以结合查找和排序

find -path "some pattern" -printf "%T@ %P\n" | sort -n | tail -1

相关内容