- Bashシェルのdateコマンドを使用して、さまざまな形式で現在の日付と時刻を表示し、カスタマイズすることができます。
- 「+」記号とさまざまなオプションコードを使用することで、dateコマンドの出力を書式設定して、曜日、月、年、またはタイムゾーンなどの特定の情報を含めることができます。
- dateコマンドをシェルスクリプトで使用して、タイムスタンプ名でディレクトリを作成したり、特定の時間情報でファイルをコピーしたりするなどのタスクを自動化できます。
date
コマンドは、ほとんどのLinuxディストリビューションやmacOSのデフォルトのシェルであるBashシェルにあります。このチュートリアルでは、コマンドラインでdate
をマスターする方法と、単に時刻を印刷する以上のことを行うためにシェルスクリプトでdate
を使用する方法を示します。
Linuxターミナルで日付と時刻を見る方法
date
コマンドを実行して、この情報を確認します。タイムゾーンの現在の日付と時刻が表示されます:
date

デフォルトの書式設定は少し奇妙に見えます。なぜ年は月と日の後に印刷されず、タイムゾーンの後ろにタグ付けされるのでしょうか?ご安心ください。出力の形式を制御したい場合は、date
がそれを実現します。date
には40以上のオプションを渡して、出力を希望どおりに正確に書式設定するように指示することができます。
オプションを使用するには、date
、スペース、プラス記号+
、および先頭にパーセント記号を含むオプションを入力します。%c
(ロケール形式の日付と時刻)オプションを使用すると、日付と時刻がロケールに関連付けられた正規化された形式で印刷されます。ロケールは、オペレーティングシステムをインストールしたときに提供した地理的および文化的情報によって設定されます。ロケールは、通貨記号、用紙サイズ、タイムゾーン、その他の文化的な規範を管理します。
date +%c

年がより自然な位置に出力されるようになりました。
date
に一度に複数のオプションを渡すことができます。オプションのシーケンスは書式文字列と呼ばれます。曜日(%A
)、日(%d
)、月名(%B
)を表示するには、次のコマンドを使用します:
date +%A%d%B

動作しますが、見栄えがよくありません。問題ありません。書式文字列全体を引用符で囲めば、スペースを含めることができます。+
が引用符の外側にあることに注意してください。
date +"%A %d %B"

次のように、書式文字列にテキストを追加することができます:
date +"Today is: %A %d %B"

date
マニュアルページを上下にスクロールして、目的のオプションを探すのはすぐに疲れます。オプションをグループ化して、より簡単に探せるようにしました。
日付と時刻を表示するオプション
- %c: タイムゾーンを含むロケールの形式で日付と時刻を印刷します。

日付を表示するオプション
- %D: 日付をmm/dd/yy形式で印刷します。
- %F: 日付をyyyy-mm-dd形式で印刷します。
- %x: 日付をロケールの形式で印刷します。

曜日を表示するオプション
- %a: 曜日をMon、Tue、Wedなどに略して印刷します。
- %A: 曜日を完全に印刷します。月曜日、火曜日、水曜日などです。
- %u: 曜日を数字で印刷します。月曜日は1、火曜日は2、水曜日は3などです。
- %w: 曜日を数字で印刷します。日曜日が0、月曜日が1、火曜日が2などです。
- %d: 月の日を印刷します。必要に応じて、先頭にゼロ(01、02 ... 09)が付きます。
- %e: 月の日を印刷します。必要に応じて、先頭にスペース('1'、'2' ... '9')が付きます。アポストロフィは印刷されないことに注意してください。
- %j: 年の日を印刷します。必要に応じて、最大2つの先頭ゼロが付きます。

週を表示するオプション
- %U: 曜日を日曜日の週の初日として、年の週の番号を印刷します。たとえば、年の3週目、年の20週目などです。
- %V: 曜日を月曜日の週の初日として、年のISO週の番号を印刷します。
- %W: 曜日を月曜日の週の初日として、年の週の番号を印刷します。

月を表示するオプション
- %bまたは%h: 月の名前を1月、2月、3月などに省略して印刷します。
- %B: 月のフルネームを1月、2月、3月などに印刷します。
- %m: 月の番号を印刷します。必要に応じて、先頭にゼロ(01、02、03 ... 12)が付きます。

年を表示するオプション
- %C: 年のない世紀を印刷します。2019年には20と印刷されます。
- %y: 年を2桁で印刷します。2019年には19と印刷されます。
- %Y: 年を4桁で印刷します。

時刻を表示するオプション
- %T: 時刻をHH:MM:SSで印刷します。
- %R: 24時間時計を使用して、HH:MMで時間と分を印刷します。秒はありません。
- %r: 12時間時計と午前または午後インジケーターを使用して、ロケールに従って時刻を印刷します。
- %X: 24時間時計を使用して、ロケールに従って時刻を印刷します。伝えられるところによると。このオプションはテスト中に
%r
とまったく同じ動作をすることに注意してください。これは以下に示すようにです。英国のロケール用に設定され、GMTに設定されたLinuxマシンでは、午前または午後インジケーターのない24時間時計を使用して時刻を印刷しました。これは想定どおりです。

時間(時)を表示するオプション
- %H: 00、01、02 ... 23の時を印刷します。
- %I: 12時間時計を使用して、00、01、02 ... 12の時を印刷します。必要に応じて、先頭にゼロが付きます。

分を表示するオプション
- %M: 分を印刷します。01、02、03 ... 59、必要に応じて先頭にゼロが付きます。

秒を表示するオプション
- %s: Unixエポックの開始である1970-01-01 00:00:00からの秒数を印刷します。
- %S: 秒を印刷します。01、02、03 ... 59、必要に応じて先頭にゼロが付きます。
- %N: ナノ秒を印刷します。

タイムゾーン情報を表示するオプション
- %z: タイムゾーンとUTCの差を印刷します。
- %:z: タイムゾーンとUTCの差を印刷します。時間と分の間にコロン(:)が入ります。
%
記号とz
の間に:
があることに注意してください。 - %::z: タイムゾーンとUTCの差を印刷します。時間、分、秒の間にコロン(:)が入ります。
%
記号とz
の間に::
があることに注意してください。 - %Z: アルファベットのタイムゾーン名を印刷します。

書式設定に関連するオプション
- %p: 午前または午後インジケーターを大文字で印刷します。
- %P: 午前または午後インジケーターを小文字で印刷します。この2つのオプションの癖に注意してください。小文字の
p
は大文字の出力、大文字のP
は小文字の出力になります。 - %t: タブを印刷します。
- %n: 改行を印刷します。

他のオプションを変更するオプション
これらの修飾子は、他のオプションの%
とオプション文字の間に挿入して、その表示を変更することができます。たとえば、%-S
は、1桁の秒の値のゼロパディングを削除します。
- -: 1つのハイフンは、1桁の値のゼロパディングを防止します。
- _: 1つのアンダースコアは、1桁の値に先頭のスペースを追加します。
- 0: 1桁の値にゼロを先頭に付けます。
- ^: 可能であれば大文字を使用します(この修飾子を尊重しないオプションもあります)。
- #: 可能であれば、オプションのデフォルトケースとは反対を使用します(この修飾子を尊重しないオプションもあります)。

さらに2つの優れたトリック
ファイルの最終変更時刻を取得するには、-r
(参照)オプションを使用します。これは%
記号の代わりに-
(ハイフン)を使用し、+
記号は必要ないことに注意してください。ホームフォルダーでこのコマンドを試してください:
date -r .bashrc

TZ設定を使用すると、1つのコマンドの実行中にタイムゾーンを変更できます。
TZ=GMT date +%c

スクリプトでの日付の使用
Bashシェルスクリプトで時刻と日付を印刷できるようにすることは簡単です。次のコンテンツを含むテキストファイルを作成し、gd.sh
として保存します。
#!/bin/bash TODAY=$(date +"Today is %A, %d of %B") TIMENOW=$(date +"The local time is %r") TIME_UK=$(TZ=BST date +"The time in the UK is %r") echo $TODAY echo $TIMENOW echo $TIME_UK
次のコマンドを入力して実行パーミッションを設定し、スクリプトを実行可能にします。
chmod +x gd.sh
このコマンドでスクリプトを実行します:
./gd.sh

dateコマンドを使用してタイムスタンプを提供できます。示されているスクリプトは、タイムスタンプを名前としてディレクトリを作成します。次に、現在のフォルダーからすべてのテキストファイルをそのディレクトリにコピーします。このスクリプトを定期的に実行することで、テキストファイルのスナップショットを取得できます。時間の経過とともに、テキストファイルのさまざまなバージョンを含む一連のフォルダーが作成されます。
これは堅牢なバックアップシステムではなく、あくまで説明を目的としていることに注意してください。
次のコンテンツを含むテキストファイルを作成し、snapshot.sh.
として保存します。
#!/bin/bash # 日付と時刻を取得 date_stamp=$(date +"%F-%H-%M-%S") # その名前でディレクトリを作成 mkdir "$date_stamp" # 現在のフォルダーからファイルのコピーを作成 cp *.txt "$date_stamp" # すべて完了し、報告して終了 echo "Text files copied to directory: "$date_stamp
次のコマンドを入力して実行パーミッションを設定し、スクリプトを実行可能にします。
chmod +x snapshot.sh
このコマンドでスクリプトを実行します:
./snapshot.sh

ディレクトリが作成されたことがわかります。その名前は、スクリプトが実行された日付と時刻です。そのディレクトリ内には、テキストファイルのコピーがあります。
少し考えたり、創造性を発揮したりすれば、謙虚なdate
コマンドでも生産的に使用することができます。
コメントする