このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

本日のtip:ファイル名に日付や時刻を入れるには

ちょっとしたtipでも「ヘーッ」と思う人もいるようなので書いてみます。Unix/Linux/Cygwin/MSYSとかでの話。

ファイル名の一部に日付や時刻を入れたいときはけっこうあります。次のようにします。


$ touch `date +%Y-%m-%d`.txt
これで、2008-11-29.txt (このエントリーを書いている時点での「今日」)という名のファイルができます。

dateコマンドの+オプションで、表示する日付・時刻のフォーマットを指定できるのです。パーセントの後の1文字は次のような意味です。

文字 意味
Y 4桁の年 2008
y 2桁の年 08
m 2桁の月 01, 11
d 2桁の日 01, 29
H 24時制2桁の時間 01, 14
M 2桁の分 01, 59
S 2桁の秒 01, 59
A 曜日 Saturday
a 曜日(省略形) Sat

曜日の表示はロケールに依存します。それと、%nで改行、%%でパーセント記号そのものです。ちょっと実験:


$ date '+%Y-%m-%d (%a)%n%H:%M:%S'
2008-11-29 (Sat)
10:22:19
$

メモを書くために、日付・時刻を含むファイルを作り、さらにそのファイルの先頭に日付・時刻を書き込む例は:


$ date '+%Y-%m-%d (%a) %H:%M:%S%n' > memo_`date +%y-%m-%d_%H-%M-%S`.txt
$ cat memo_08-11-29_10-23-18.txt
2008-11-29 (Sat) 10:23:18

$

もう少し実用的な例として、「パッチの作り方と当て方はこうするもんね」で紹介したパッチ(差分)を作るコマンドラインシェルスクリプトにしてみます。


#!/bin/sh
# Name: make-diff

[ -z "$1" ] && eval 'echo "Usage: $0 file-or-directory-name"; exit 1'

TODAY=`date +%Y%m%d`
[ -f "$1" ] && [ -f "$1.orig" ] && eval 'diff -u "$1.orig" "$1" > "$1.$TODAY.diff"; exit 0'
[ -d "$1" ] && [ -d "$1.orig" ] && eval 'diff -Naru "$1.orig" "$1" > "$1.$TODAY.diff"; exit 0'

echo "$1 and $1.orig must be existing files or directories."; exit 1

*1:引用符が余計なお世話になってしまう事態も稀にあります。