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 个文件。
我怎样才能尽可能简单地做到这一点?
对于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)