dateコマンドで現在日時を確認・フォーマットを指定する方法

先生

えっ、dateコマンドって日時表示だけじゃないの?知っておくとマジで捗る応用ワザ、教えちゃいます!

dateコマンドとは?基本と使い方

LinuxやmacOSなどのUnix系OSで、現在の日時を表示・設定するために使用されるコマンドがdateコマンドです。シェルスクリプトなどで頻繁に利用され、ログファイルへのタイムスタンプ付与や、特定の日時を基準とした処理など、様々な場面で役立ちます。

基本的な使い方は、ターミナルでdateと入力するだけです。これだけで、現在の日時が標準出力に表示されます。

date

これだけでは、デフォルトのフォーマットで表示されるだけですが、dateコマンドは非常に柔軟にフォーマットを指定することができます。次のセクションでは、その方法について詳しく解説します。

フォーマットを指定して日時を表示する

dateコマンドの最も強力な機能の一つが、表示する日時のフォーマットを自由に指定できることです。+%[変換指定子]というオプションを使うことで、様々な形式で日時を表示できます。

よく使う変換指定子をいくつか紹介します。

%Y: 年 (4桁)

%m: 月 (2桁)

%d: 日 (2桁)

%H: 時 (24時間表示)

%M: 分

%S: 秒

%s: エポックからの秒数 (UNIX時間)

%F: ISO 8601 日付フォーマット (%Y-%m-%d)

例えば、2023-10-27 10:30:00 のように表示したい場合は、次のコマンドを実行します。

date '+%Y-%m-%d %H:%M:%S'

複数の変換指定子を組み合わせて、自由にフォーマットをカスタマイズできます。区切り文字も自由に指定可能です。

例えば、次のように表示することもできます。

date '+現在の日付は%Y年%m月%d日です。時刻は%H時%M分%S秒です。'

このように、日本語を含めることも可能です。ただし、シェルのエンコーディングによっては文字化けする可能性があるので注意が必要です。

日付の計算:相対的な日時の指定

dateコマンドは、現在の日時からの相対的な日時を表示する機能も持っています。-dまたは--dateオプションを使用します。

例えば、明日の日付を表示するには、次のようにします。

date -d 'tomorrow'

同様に、昨日の日付を表示するには、次のようにします。

date -d 'yesterday'

+または-記号と数値を組み合わせて、より複雑な日付計算も可能です。例えば、1週間後の日付を表示するには、次のようにします。

date -d '+1 week'

1ヶ月前の日付を表示するには、次のようにします。

date -d '-1 month'

これらの相対的な日時の指定は、シェルスクリプトで非常に役立ちます。例えば、ログファイルをローテーションさせる際に、古いログファイルを削除するタイミングを計算する、といった処理に利用できます。

特定のUnix時間からの変換も可能です。

date -d @1678886400 '+%Y-%m-%d %H:%M:%S'

シェルスクリプトでの活用例

dateコマンドは、シェルスクリプトと組み合わせることで、その真価を発揮します。以下に、具体的な活用例をいくつか紹介します。

ログファイルへのタイムスタンプ付与

LOG_FILE="app.log"
CURRENT_TIME=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$CURRENT_TIME] イベントが発生しました" >> $LOG_FILE

このスクリプトは、app.logファイルに、現在の日時をタイムスタンプとして付与したメッセージを追記します。

バックアップファイルの作成

BACKUP_DIR="backup"
CURRENT_DATE=$(date '+%Y%m%d')
FILE_TO_BACKUP="data.txt"
BACKUP_FILE="$BACKUP_DIR/$FILE_TO_BACKUP.$CURRENT_DATE"
cp $FILE_TO_BACKUP $BACKUP_FILE

このスクリプトは、data.txtファイルを、日付をファイル名に含めてbackupディレクトリにバックアップします。

指定日時のファイル操作

TARGET_DATE=$(date -d '-7 days' '+%Y-%m-%d')
FIND_COMMAND="find . -type f -newermt ${TARGET_DATE} -print"
eval ${FIND_COMMAND}

このスクリプトは、7日前よりも新しいファイルを検索します。

参考リンク

まとめ

dateコマンドは、Unix系OSにおける基本的なコマンドでありながら、非常に強力な機能を持っています。日時の表示・フォーマット指定、相対的な日時の計算など、様々な場面で活用できます。シェルスクリプトと組み合わせることで、さらに複雑な処理も実現可能です。ぜひdateコマンドをマスターして、日々の作業効率を向上させてください。