重要なポイント
- Bash シェルの date コマンドを使用すると、現在の日付と時刻をさまざまな形式で表示し、カスタマイズできます。
- 「+」記号とさまざまなオプション コードを使用すると、日付コマンドの出力をフォーマットして、日、月、年、タイムゾーンなどの特定の情報を含めることができます。
- date コマンドをシェル スクリプトで使用すると、タイムスタンプ名を持つディレクトリの作成や、特定の時刻情報を持つファイルのコピーなどのタスクを自動化できます。
date
コマンドは Bash シェルにあります。Bash シェルは、ほとんどの Linux ディストリビューション、さらには macOS のデフォルト シェルです。このチュートリアルでは、コマンド ラインで
date
をマスターする方法と、それをシェル スクリプトで使用して単に時刻を出力する以上のことを行う方法を説明します。
Linux ターミナルで日付と時刻を確認する方法
この情報を確認するには、
date
コマンドを実行します。タイムゾーンの現在の日付と時刻が出力されます。
日付
デフォルトの書式設定は少し間抜けに見えます。なぜ年は、タイムゾーンの後ろの最後にタグ付けされるのではなく、月と日の後に印刷されないのですか?心配する必要はありません。必要な出力形式を制御できる場合、
date
それを確実に実現します。希望どおりに出力を正確にフォーマットするように指示するために渡す
date
ができるオプションは、現在 40 を超えています。
いずれかのオプションを使用するには、
date
、スペース、プラス記号
+
を入力し、先頭のパーセント記号を含むオプションを入力します。
%c
(ロケール形式の日付と時刻) オプションを使用すると、日付と時刻がロケールに関連付けられた正規化された形式で印刷されます。ロケールは、オペレーティング システムのインストール時に指定した地理的および文化的情報によって設定されます。ロケールは、通貨記号、用紙サイズ、タイムゾーン、その他の文化的規範などを管理します。
日付 +%c
出力内で年がより自然な位置に表示されるようになりました。
date
までに複数のオプションを一度に渡すことができます。一連のオプションはフォーマット文字列と呼ばれます。日の名前 (
%A
)、月の日 (
%d
)、および月の名前 (
%B
) を確認するには、次のコマンドを使用します。
日付 +%A%d%B
それはうまくいきましたが、醜いです。問題ありません。フォーマット文字列全体を引用符で囲む限り、スペースを含めることができます。
+
引用符の外側にあることに注意してください。
日付 +"%A %d %B"
次のように、フォーマット文字列にテキストを追加できます。
日付 +"今日は: %A %d %B"
date
マニュアル ページ
を上下にスクロールして、必要なオプションを探すのはすぐに面倒になります。より簡単に回避方法を見つけられるように、オプションをグループにまとめました。
日付と時刻を表示するオプション
- %c : タイムゾーンを含む日付と時刻をロケールの形式で出力します。
日付を表示するオプション
- %D : 日付を mm/dd/yy 形式で出力します。
- %F : 日付を yyyy-mm-dd 形式で出力します。
- %x : ロケールの形式で日付を出力します。
曜日を表示するオプション
- %a : 曜日の名前を月、火、水などに省略して表示します。
- %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 : 月の名前を Jan、Feb、Mar などに省略して出力します。
- %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 マシンでは、予想どおり、AM または PM インジケーターのない 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 : AM または PM インジケーターを大文字で印刷します。
-
%P
: 午前または午後のインジケーターを小文字で印刷します。これら 2 つのオプションの癖に注意してください。小文字の
p大文字の出力を与え、大文字のP小文字の出力を与えます。 - %t : タブを印刷します。
- %n : 新しい行を印刷します。
他のオプションを変更するオプション
これらの修飾子を
%
と他のオプションのオプション文字の間に挿入して、表示を変更できます。たとえば、
%-S
1 桁の秒値の先頭のゼロを削除します。
- – : 1 つのハイフンにより、1 桁の値のゼロ埋め込みが防止されます。
- _ : 1 つのアンダースコアにより、1 桁の値の先頭にスペースが追加されます。
- 0 : 1 桁の値の先頭にゼロを付けます。
- ^ : 可能であれば大文字を使用します (すべてのオプションがこの修飾子を考慮するわけではありません)。
- # : 可能であれば、オプションのデフォルトのケースとは逆の値を使用します (すべてのオプションがこの修飾子を考慮するわけではありません)。
さらに 2 つの巧妙なトリック
ファイルの最終変更時刻を取得するには、
-r
(参照) オプションを使用します。これは
%
記号の代わりに
-
(ハイフン) を使用しており、
+
記号は必要ないことに注意してください。ホームフォルダーで次のコマンドを試してください。
日付 -r .bashrc
TZ 設定を使用すると、1 つのコマンドの実行中にタイムゾーンを変更できます。
TZ=GMT 日付 +%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
# obtain the date and time
date_stamp=$(date + "%F-%H-%M-%S" )
# make a directory with that name
mkdir " $date_stamp "
# copy the files from the current folder into it
cp *.txt " $date_stamp "
# all done, report back and exit
echo "Text files copied to directory: " $date_stamp
次のコマンドを入力して実行権限を設定し、スクリプトを実行可能にします。
chmod +x スナップショット.sh
次のコマンドでスクリプトを実行します。
./スナップショット.sh
ディレクトリが作成されたことがわかります。その名前は、スクリプトが実行された日時です。そのディレクトリ内にはテキスト ファイルのコピーがあります。
少し考えて創造力を発揮すれば、地味な
date
コマンドでも生産的に活用できます。





