久しぶりの備忘録です。
今までBashだけでできずにPythonとかで書いてたのですが、意外と簡単にできたので・・・
というかなんで今まで知らなかったんだ・・・
目的
Linuxサーバ上に保存しているファイルについて、更新のタイムスタンプの期間を参照してfindにてファイル検索したい。
また、できれば期間の範囲指定をしたい。
(例)
タイムスタンプが 2019/07/01 09:00:00 – 2019/07/01 10:00:00 の範囲にあるファイルを抽出する。
方法
今まではPythonでファイルのinode情報を取得、タイムスタンプ抽出、条件に合致したら出力、みたいなことをしていましたが、正直効率が悪いし動作が重い。
Bashのコマンド1つでできないかなーって思ってたらfindのオプションに良いものがありました。
それがnewermtです。
というか、なんで今まで見つけられなかったんだ・・・
使い方
find [検索するパス(DIR)] -newermt [日時]
これで更新タイムスタンプを見てファイルを検索することができます。
(例)
find / -newermt '20190701 09:00' -type f
これで、「/配下」かつ「ファイル」かつ「更新タイムスタンプが2019年7月1日9時以降」のファイルを検索することができます。
今までわざわざpython書いていたのがあほらしく思える簡単さ・・・
更新のタイムスタンプの範囲を指定するには、newermtオプションをnotで指定してあげることで実装できます。
find [検索するパス] -newermt [日時] ! -newermt [日時]
(例)
find / -newermt '20190701 09:00' ! -newermt '20190701 10:00' -type f
これで「/配下」かつ「ファイル」かつ「更新タイムスタンプが2019年7月1日9時~2019年7月1日10時」のものを検索することができます。
涙が出るほど簡単・・・
他のタイムスタンプを参照する場合
このようなタイムスタンプを参照するためのオプションは、mtimeを参照するnewermtのほかに、atimeを参照するnewerat、ctimeを参照するnewerctがあります。
場合によって使い分けると良きですね。
まとめ
- findでタイムスタンプを参照した検索ができる
- mtimeを参照するにはnewermt
- atime 〃 newerat
- ctime 〃 newerct
今までの苦労はいったい・・・
コメント