シェルスクリプト逆引き大全 サポート情報 Tips 153

UNIXシェルスクリプト逆引き大全 333の極意

[サポート情報] Tips 153 ファイルの更新日付を調べる(標準編)

ftime_std.shのバグ [2005/05/15修正]

読者の方からの指摘により,chap05/ftime_std.shに次のようなバグが発見されました。最新版のアーカイブでは修正されています。

現象

昨年更新されて,かつ更新から6ヶ月以内のファイルについて,誤った更新年が表示されます。

原因

lsコマンドは6ヶ月以内に更新されたファイルの更新年を表示しないので,更新月を手がかりに判断する必要があります。

古いバージョンのftime_std.shでは無条件に現在の年を当てはめていましたが,6ヶ月以内に年をまたいでいる場合(現在の月が1〜5月の場合)には去年の日付を持つファイルも存在しますから,誤った更新年が表示されることがあります。

対処

更新年が表示されていない(=6ヶ月以内に更新された)ファイルの場合,ファイルの更新月と現在の月を比べます。更新月の方が大きな数値となる時は,昨年更新されたファイルと判断できます。

月の比較にはtestコマンド([ ... ])が使えます。「昨年」は,exprコマンドを使って現在の「年」から1を引くことで得ることができます。

[戻る]