檜山正幸のキマイラ飼育記 このページをアンテナに追加 RSSフィード

キマイラ・サイトは http://www.chimaira.org/です。
トラックバック/コメントは日付を気にせずにどうぞ。
連絡は hiyama{at}chimaira{dot}org へ。
蒸し返し歓迎!
ところで、アーカイブってけっこう便利ですよ。タクソノミーも作成中。

2008-11-29 (土)

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

| 10:29 | 本日の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:引用符が余計なお世話になってしまう事態も稀にあります。

sodasoda 2008/12/01 11:37 eval は邪悪なので、そういう目的で、かつ if を使いたくないなら { ...; } を使う方が良いのではないでしょうか?
[ -z "$1" ] && { echo "Usage: $0 file-or-directory-name"; exit 1; }
セミコロンの必要性が ( ... ) の場合とは異なるので却下かもしれませんが。

m-hiyamam-hiyama 2008/12/01 11:50 sodaさん、
> eval は邪悪なので、
JavaScriptではいつもJSLintに「evalはevilだ」と怒られましたが (http://d.hatena.ne.jp/m-hiyama/20080731/1217493351)、シェルでも邪悪扱いですか?

> セミコロンの必要性が ( ... ) の場合とは異なるので却下かもしれませんが。
またセミコロンの微妙な差ですか、セミコロンもうイヤッ。

sodasoda 2008/12/01 13:05 > シェルでも邪悪扱いですか?

邪悪でしょう。
JavaScript の場合と同様に (CGIなどでは)セキュリティホールの
温床ですし。それに他に代替手段があるのに安易にメタなレベルの
機能に頼ってしまうのはちょっと気が進みません。
まあシェルの場合 eval しか手がないというケースも結構ありますが。

m-hiyamam-hiyama 2008/12/02 10:51 sodaさん、
> 他に代替手段があるのに安易にメタなレベルの機能に頼ってしまうのはちょっと気が進みません。
えっ、そっ、そうですかぁ。

sodasoda 2008/12/09 12:08 > えっ、そっ、そうですかぁ。

う、えっと、そうでもないんでしょうか?
メタレベルとの行き来をするところは、限定/局所化されてないとちょっと気持ちが悪いという感覚があるんですが、これって特殊?

m-hiyamam-hiyama 2008/12/09 13:08 sodaさん、
> これって特殊?
いや、ぼくのほうが特殊かもしれません。evalやapplyがあれば無頓着に使いますからね。