ksaitoの日記

日々試したことの覚え書き

ファイルの更新日付とアクセス日付

ファイルが持っている日付情報は、3つあります。
最初にファイルを作成すると全て同じ日付になっています。

$ touch test.txt
$ stat test.txt 
  File: `test.txt'
Access: 2012-04-01 16:16:20.549952288 +0900
Modify: 2012-04-01 16:16:20.549952288 +0900
Change: 2012-04-01 16:16:20.549952288 +0900
$ 

最終アクセス日付

Accessは、ファイルに最後にアクセス(読み込み)した日付です。
catコマンドなどでファイルを読み込むと日付が変わります。

$ cat test.txt
$ stat test.txt
  File: `test.txt'
Access: 2012-04-01 16:19:35.665952289 +0900
Modify: 2012-04-01 16:16:20.549952288 +0900
Change: 2012-04-01 16:16:20.549952288 +0900
$ 

最終更新日付

Modifyは、ファイルを変更した日付です。
エディタやリダイレクトでファイルを更新すると変更されます。
ファイルを更新するとChangeも更新されます。

$ echo date >> test.txt 
$ stat test.txt 
  File: `test.txt'
Access: 2012-04-01 16:19:35.665952289 +0900
Modify: 2012-04-01 16:22:43.069952289 +0900
Change: 2012-04-01 16:22:43.069952289 +0900
$ 

最終変更日付

Changeは、ファイルの属性や内容が変更された日付です。
ファイルの属性が変更された時には、Changeだけが更新されます。

$ chmod -w test.txt
$ stat test.txt 
  File: `test.txt'
Access: 2012-04-01 16:19:35.665952289 +0900
Modify: 2012-04-01 16:22:43.069952289 +0900
Change: 2012-04-01 16:23:53.497952286 +0900
$ 

lsコマンドで確認

lsコマンドでは、-lオプションでModify、-luオプションでAccessが確認できます。
Changeは、lsコマンドでは確認できません。たぶん...

$ stat test.txt 
  File: `test.txt'
  Size: 5               Blocks: 8          IO Block: 4096   通常ファイル
Access: 2012-04-01 16:19:35.665952289 +0900
Modify: 2012-04-01 16:22:43.069952289 +0900
Change: 2012-04-01 16:23:53.497952286 +0900
$ ls -l
合計 4
-r--r--r-- 1 guest guest 5 2012-04-01 16:22 test.txt
$ ls -lu
合計 4
-r--r--r-- 1 guest guest 5 2012-04-01 16:19 test.txt
$ 

findコマンドの日付

いつも忘れてしまうので...

mtime

findコマンドの-mtimeオプションでn日より以前に更新されたファイル、n日以内に更新されたファイルを探せます。
このオプションは、-mtime +nと指定すると24時間☓nよりModifyが前のファイルを探し、-mtime -nで24時間☓nより後の更新日付を探します。
なので、24時間以内に更新されたファイルは、条件にかからないケースがあります。

$ date
2012年  4月  1日 日曜日 16:45:39 JST
$ ls -l 
合計 4
-r--r--r-- 1 guest guest 5 2012-03-30 00:00 test.txt
-rw-rw-r-- 1 guest guest 0 2012-03-31 00:00 test2.txt
$ find . -mtime +1
./test.txt
$ 
.
$

mmin

findコマンドの-mminオプションは、-mtimeオプションを分単位に実行してくれるコマンドです。
下記のように41時間より前に更新されたファイルと41時間以内に更新されたファイルを分で指定できます。

$ find . -mmin +2460
./test.txt
$ find . -mmin -2460
.
./test2.txt
$