任意の日時以降に更新されたファイルを取り出す

ちょっとしたファイル検索のときに find コマンドがすごく便利で結構好きなのですが、find コマンドを使ってある日時以降に更新されたファイルを取り出すっていうのをどうすんのかなーと思ってたら。

find コマンドに日時を渡すことはできないけど、ファイルを渡すことができるのでその性質を利用しようという作戦。

2013/11/20 15:00 以降に更新されたファイルを探すには。

 

touch -t 201311201500 /tmp/datefile 
find /var -type f -newer /tmp/datefile

 

検索したい日時のファイルを作り( touch -t )、そのファイルより新しいモノを検索( -newer )、という流れ。

日次のバッチなんかで、昨日の9時以降に更新されたモノ一覧が欲しいときは

 

touch -t `TZ=aaa15 date +%Y%m%d0900` /tmp/datefile 
find /var -type f -newer /tmp/datefile

 

ついでに、検索してきたファイル群をディレクトリ構造保ったまま別の場所にコピーするには (たとえば /backup の下にコピー)

 

touch -t `TZ=aaa15 date +%Y%m%d0900` /tmp/datefile 
find /var -type f -newer /tmp/datefile | cpio -pdumv /backup/

 

ここで悲しいお知らせなのですが、AIX という OS に付属の cpio は 2GB 以上のファイルを扱えないという制限があってバックアップ用途に使えなくてガッカリ感が半端ないです。

容量制限のない GNU 版の cpio を入れてみたらこれまた動作が遅くて ( ふつうの cp の倍くらいかかる ) やってらんないです。

ちょっと手の込んだことしたかったら有償のバックアップソフトを使えと。そういう話ですか。