📝

findコマンドで期間を指定した検索をする

3 min read

findコマンドで期間を指定したファイル検索をしたい場合、newerというオプションで簡単に実現できちゃいます。すごいよfind。本当にいつもありがとう。

確認環境

  • OS
CentOS Linux release 7.9.2009 (Core)
  • find command
find (GNU findutils) 4.5.11

テストファイル

生贄にファイル名と「mtime、atime、ctime」の足並みが揃ったテストファイルをしばいておきます。

$ stat -c "%n, %x, %y, %z" $(ls) | head
2021_10_24_18:00, 2021-10-24 18:00:00.005000068 +0900, 2021-10-24 18:00:00.005000068 +0900, 2021-10-24 18:00:00.005000068 +0900
2021_10_25_18:00, 2021-10-25 18:00:00.004000055 +0900, 2021-10-25 18:00:00.004000055 +0900, 2021-10-25 18:00:00.004000055 +0900
2021_10_26_18:00, 2021-10-26 18:00:00.005000069 +0900, 2021-10-26 18:00:00.005000069 +0900, 2021-10-26 18:00:00.005000069 +0900
2021_10_27_18:00, 2021-10-27 18:00:00.005000068 +0900, 2021-10-27 18:00:00.005000068 +0900, 2021-10-27 18:00:00.005000068 +0900
2021_10_28_18:00, 2021-10-28 18:00:00.005000069 +0900, 2021-10-28 18:00:00.005000069 +0900, 2021-10-28 18:00:00.005000069 +0900
2021_10_29_18:00, 2021-10-29 18:00:00.005000068 +0900, 2021-10-29 18:00:00.005000068 +0900, 2021-10-29 18:00:00.005000068 +0900
2021_10_30_18:00, 2021-10-30 18:00:00.004000055 +0900, 2021-10-30 18:00:00.004000055 +0900, 2021-10-30 18:00:00.004000055 +0900
2021_10_31_18:00, 2021-10-31 18:00:00.005000069 +0900, 2021-10-31 18:00:00.005000069 +0900, 2021-10-31 18:00:00.005000069 +0900
2021_11_01_18:00, 2021-11-01 18:00:00.005000068 +0900, 2021-11-01 18:00:00.005000068 +0900, 2021-11-01 18:00:00.005000068 +0900
2021_11_02_18:00, 2021-11-02 18:00:00.004000055 +0900, 2021-11-02 18:00:00.004000055 +0900, 2021-11-02 18:00:00.004000055 +0900

newerオプションについて

タイムスタンプ newerオプション 意味
mtime -newermt 最終更新日時
atime -newerat 最終アクセス日時
ctime -newerct inodeの更新日時

newermtで期間指定検索

  • 2021/10/30 00:00:00 〜 2021/11/05 00:00:00

※newer に「YYYYMMDD」を渡すだけで、上記の日付指定が可能です。
※終点は否定形(!)で渡します。

$ find . -newermt "20211030" ! -newermt "20211105"
./2021_11_04_18:00
./2021_11_03_18:00
./2021_11_02_18:00
./2021_11_01_18:00
./2021_10_31_18:00
./2021_10_30_18:00
  • 2021/10/30 18:00:00 〜 2021/11/05 18:01

※時刻指定は「hh」だけでもOKです。時分の場合は「hhmm」で指定可能です。

find . -newermt "20211030 18" ! -newermt "20211105 1801"
./2021_11_05_18:00
./2021_11_04_18:00
./2021_11_03_18:00
./2021_11_02_18:00
./2021_11_01_18:00
./2021_10_31_18:00
./2021_10_30_18:00
  • 2021/10/30 18:00:00 〜 2021/11/05 18:00:01

※秒で指定したい場合は、時刻をコロンで記述してあげます。

find . -newermt "20211030 18" ! -newermt "20211105 18:00:01"
./2021_11_05_18:00
./2021_11_04_18:00
./2021_11_03_18:00
./2021_11_02_18:00
./2021_11_01_18:00
./2021_10_31_18:00
./2021_10_30_18:00

1週間前から発生して3日前に収束した事象の証跡を片っ端から集めたり・・・とか
とにかく期間を指定したい局面では、覚えやすいし書きやすいと思われます。

$ find . -newerct "$(date "+%Y%m%d" --date "1 week ago")" ! -newerct "$(date "+%Y%m%d" --date "3 day ago")"
./2021_11_19_18:00
./2021_11_18_18:00
./2021_11_17_18:00
./2021_11_16_18:00

neweratで期間指定検索

オプションを変更するのみで、書式は先述したものと同様になります。

  • 2021/10/30 00:00 〜 2021/11/05 00:00
$ find . -newerat "20211030" ! -newerat "20211105"
./2021_11_04_18:00
./2021_11_03_18:00
./2021_11_02_18:00
./2021_11_01_18:00
./2021_10_31_18:00
./2021_10_30_18:00

newerctで期間指定検索

オプションを変更するのみで、書式は先述したものと同様になります。

  • 2021/10/30 00:00 〜 2021/11/05 00:00
$ find . -newerct "20211030" ! -newerct "20211105"
./2021_11_04_18:00
./2021_11_03_18:00
./2021_11_02_18:00
./2021_11_01_18:00
./2021_10_31_18:00
./2021_10_30_18:00

Discussion

ログインするとコメントできます