RaspbianなどLinux系のOSを使う環境における、dateコマンドの使用方法と活用方法の一例を説明します。
ラズベリーパイで作成したファイルやディレクトリに、日付を打ってバックアップをとっておきたい場合に、参考にしてください。
dateコマンドを実行する
LX terminalを開き、dateコマンドを実行すると、実行したときの時刻が表示されます。
1 2 | $ date 2019年 2月 14日 木曜日 00:33:26 JST |
上記のように、”年”とか”月”が日本語で表示されるかどうかは、使用する環境によります。
これは、LANGという環境変数の値に依存します。
もし、LANGの値が”C”に設定されていたら、
1 2 | $ date Thu Feb 14 00:33:26 JST 2019 |
のように、英語表記になると思います。
LANGの値を明示的に設定して、上記のように英語表記で表示させることもできます。
1 2 | $ LANG=C date Thu Feb 14 00:33:26 JST 2019 |
dateコマンドでは、現在時刻の設定も行うことができるのですが、ネットワークに接続してインターネットにつながっている環境ですと、大抵はネットワークに同期して(ネットワーク上の)現在時刻を取得する設定になっていると思いますので、すぐに現在時刻にもどると思います。
ファイル名に日付をつけてバックアップする
dateコマンドを活用する例としては、ファイルやディレクトリのバックアップ作業を行う時に、ファイル名やディレクトリ名に日付情報や時間情報を自動的につけて保管する、という状況が上げられるでしょう。
例えば、draft.txt というテキストファイルを作成していて、日々更新しているけれど、大事なファイルなので定期的にバックアップを取りたい、といった場合です。
以下の簡単なシェルスクリプトで実現できます。
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/sh FNAME_BASE=$1 BACKUP_DIR="./Backup" DATE=`date +"%Y%m%d_%H%M%S"` FNAME=$DATE\_$FNAME_BASE cp -pr $FNAME_BASE $BACKUP_DIR/$FNAME exit 0 |
このスクリプトを実行するまえに、
1 | $ mkdir Backup |
を実行して、Backupというディレクトリを作っておきます。
また、シェルスクリプトを実行するには、
1 | $ chmod +x backup.sh |
を一度だけ実行しておくのでした。(実行権限の付与)
あとは、
1 | $ ./backup.sh draft.txt |
を実行すれば、Backupというディレクトリの下に
1 | 20190214_004937_draft.txt |
といった名前のファイルが作成されます。
このファイルは、draft.txtのコピーで、ファイルの接頭辞に “20190214_004937_” が付与されています。これがbackup.shを実行した時の日時を表す文字列になっているのです。
上記のbackup.shの細かい説明は省略しますが、dateコマンドを実行している6行目だけポイントを説明すると、
- dateコマンドを”+”オプション付きで実行している。
- “+”オプションの中身は、「年月日_時分秒」というフォーマットを指定している
- dateコマンド全体を “`” で括ることにより、dateコマンドの実行結果をDATEという変数に格納している。
となります。これにより、dateコマンドを実行したときのタイムスタンプが文字列としてDATE変数に格納されます。
あとは、この情報をファイル名の接頭辞として使用して、Backupというディレクトリ下にdraft.txtのコピーを格納しているのです。
このスクリプトでは、テキストファイルをそのまま(圧縮せず)コピーしている点やバックアップの数を管理していない点などから、大きいファイルのサイズを何度もバックアップするときには注意が必要ですが、しくみとしては理解していただけると思います。
プログラムのソースコードのバックアップを考える場合には、このコピーによる方法ではなく、バージョン管理ソフトの使用を検討した方がよいですが、それは別の機会に説明します。
dateコマンドは上記のフォーマット以外にもいろいろな設定がありますので、確認してみましょう。