2010年1月27日水曜日

シェルスクリプトでファイルの更新日時比較

シェルスクリプトでファイルの更新日時(mtime)の比較をやる方法についてメモ。

(方法1) test の -nt と -ot
[root@centos5 ~]# strings /usr/bin/test | grep FILE1
  FILE1 -ef FILE2   FILE1 and FILE2 have the same device and inode numbers
  FILE1 -nt FILE2   FILE1 is newer (modification date) than FILE2
  FILE1 -ot FILE2   FILE1 is older than FILE2
test のヘルプってどうやって出すんだ。。。

(方法2) date -r
[root@centos5 ~]# date -r /etc/grub.conf +"%F %T"
2010-01-24 19:58:18
[root@centos5 ~]# date -r /etc/grub.conf +%s
1264330698
%s seconds since 1970-01-01 00:00:00 UTC
なので、シェル変数に入れていろいろできる。

(方法3) stat -c
[root@centos5 ~]# stat -c "%Y" /etc/grub.conf 
1264250945
[root@centos5 ~]# stat -c "%Y" /boot/grub/grub.conf 
1264330698
[root@centos5 ~]# ls -l /etc/grub.conf 
lrwxrwxrwx 1 root root 22 Jan 23 21:49 /etc/grub.conf -> ../boot/grub/grub.conf
[root@centos5 ~]# ls -l /boot/grub/grub.conf 
-rw------- 1 root root 830 Jan 24 19:58 /boot/grub/grub.conf
これですが、シンボリックリンクの場合は注意する必要があるようです。あと、システムが古いと -c オプションが無いかもしれません。

(方法4) touch -t で一時ファイルを作って、find を使う。

ネットではこの(方法4)が散見されました。

1 件のコメント:

  1. > test のヘルプってどうやって出すんだ。。。

    bash の help で出せると知りました。

    # help test
    ...
    FILE1 -nt FILE2 True if file1 is newer than file2 (according to
    modification date).

    FILE1 -ot FILE2 True if file1 is older than file2.

    返信削除

人気ブログランキングへ にほんブログ村 IT技術ブログへ