複数のディレクトリの各ディレクトリの最後のn個の最新のファイルを見つける方法

複数のディレクトリの各ディレクトリの最後のn個の最新のファイルを見つける方法

複数のディレクトリの最後のn個の最新のファイルを見つける方法を見つけようとしています。

問題は、ディレクトリが構造化されていますが、実際には階層的に配置されず、特定の名前があることです。例:

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

私の問題は次のとおりです。 findコマンドで-regexオプションを使用できますが、これは最新のファイルをフィルタリングするために追加の検索を実行した後にのみ最新のファイルを提供しますが、センサーの動作に関係なく最新のファイルに対してのみ機能します。使用 。

私が達成したいのは、タイムスタンプに基づいて最新のn個のファイルを表示する出力を作成することです。

できるだけ簡単にこれを行うには?

ベストアンサー1

.csvGNUシステムのすべてのディレクトリにある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}'

(ファイルは最新のものから古いものの順にリストされています。)

を使用すると、zsh次の操作も実行できます。

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

おすすめ記事