如何查找多个目录中每个目录的最后 n 个最新文件

use*_*392 0 ls find timestamps files

我正在尝试找到一种方法来查找多个目录的最后 n 个最新文件。

问题在于目录是结构化的,但并不是真正分层放置的,但它们有特定的名称。例子:

./sensor
-./motion
--./2dMotion
---./saved
----./<name>.csv
---./processed
----./<name>.csv
--./3dMotion
---./saved
---./processed
-./temp
--./saved
---./<name>.csv
--./processed
Run Code Online (Sandbox Code Playgroud)

我的问题如下:我可以在 find 命令中使用 -regex 选项,但这在进一步搜索过滤最新文件的命令之后只能给我最新的文件,但这仅对最新文件有效,无论传感器如何用来。

我想要实现的是创建输出,其中根据时间戳显示最新的 n 个文件。

我怎样才能尽可能简单地做到这一点?

Sté*_*las 5

对于GNU 系统上.csv任意目录中的10 个最新常规文件:saved

LC_ALL=C find . -type f -regex '.*/saved/[^/]*\.csv' -printf '%T@:%p\0' |
  sort -rnz |
  awk -v RS='\0' -F/ '{sub(/[^:]*:/, ""); file = $0; NF--}
                      ++n[$0] <= 10 {print file}'
Run Code Online (Sandbox Code Playgroud)

(文件将从最新到最旧的顺序列出)。

使用zsh,您还可以执行以下操作:

for dir (**/saved(NDF)) print -rC1 -- $dir/*.csv(ND.om[1,10])
Run Code Online (Sandbox Code Playgroud)