Files

如何為多個目錄中的每一個查找最後 n 個最新文件

  • October 25, 2021

我正在嘗試找到一種方法來查找多個目錄的最後 n 個最新文件。

問題在於目錄是結構化的,但不是真正分層放置的,但它們具有特定的名稱。例子:

./sensor
-./motion
--./2dMotion
---./saved
----./<name>.csv
---./processed
----./<name>.csv
--./3dMotion
---./saved
---./processed
-./temp
--./saved
---./<name>.csv
--./processed

對我來說問題如下:我可以在 find 命令中使用 -regex 選項,但是在搜尋過濾最新文件的進一步命令之後,這只能給我最新文件,但這僅對最新文件有效,而不管感測器用來。

我想要實現的是創建輸出,其中將根據時間戳顯示最新的 n 個文件。

我怎樣才能盡可能簡單地做到這一點?

對於GNU 系統上任何目錄中的 10 個最新的正常.csv文件: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}'

(文件將從最新到最舊列出)。

使用zsh,您還可以執行以下操作:

for dir (**/saved(ND/)) print -rC1 -- $dir/*.csv(ND.om[1,10])
find . -type d -exec bash -c 'echo "next dir: ${1}" ; ls -lt "$1" |
   grep ^- |
   head -n 5' bash {} \;

整棵樹中最新的

事實證明這不是答案,因為它提供了整個樹中的最新文件,但無論如何它可能會有所幫助。

find . -type f -printf "%T@ %p\n" |
   sort -nr |
   awk 'NR==6 { exit; } {$1=""; print; }'

引用自:https://unix.stackexchange.com/questions/389277