キマイラ・サイトは http://www.chimaira.org/です。
トラックバック/コメントは日付を気にせずにどうぞ。
連絡は hiyama{at}chimaira{dot}org へ。
蒸し返し歓迎!
ところで、アーカイブってけっこう便利ですよ。タクソノミーも作成中。
2008-11-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
- セミコロンの打ち所を間違うので、ifは使いませんでした :-)
- '['(testコマンド)と']'のなかに入っているハイフンナンチャラの説明はコチラ。
- 複数のコマンドを1個のコマンドのように扱いたくて、シェル関数を書くほどのことでもないなら eval が便利。丸括弧で囲んで
(echo "Usage: $0 file-or-directory-name"; exit 1)だと、exitが無意味になります。 - ファイル名を二重引用符で囲んでいるのは、空白を含むファイル名を想定してです*1。
*1:引用符が余計なお世話になってしまう事態も稀にあります。
トラックバック - http://d.hatena.ne.jp/m-hiyama/20081129/1227922157
リンク元
- 95 http://www.google.co.jp/
- 56 http://reader.livedoor.com/reader/
- 48 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGIH_jaJP280JP281&q=ハッセ図 順序関係
- 32 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/m-hiyama/20081129/1227922157
- 30 http://d.hatena.ne.jp/
- 30 http://www.google.co.jp/search?hl=ja&q=ファイル名に日付を入れる&lr=&aq=f&oq=
- 24 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=json+配列の数&btnG=検索
- 22 http://b.hatena.ne.jp/entry/11120544/本日のtip:ファイル名に日付や時刻を入れるには - 檜山%
- 19 http://www.google.co.jp/search?q=ファイル名 日付&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 19 http://www.google.com/reader/view/
[ -z "$1" ] && { echo "Usage: $0 file-or-directory-name"; exit 1; }
セミコロンの必要性が ( ... ) の場合とは異なるので却下かもしれませんが。
> eval は邪悪なので、
JavaScriptではいつもJSLintに「evalはevilだ」と怒られましたが (http://d.hatena.ne.jp/m-hiyama/20080731/1217493351)、シェルでも邪悪扱いですか?
> セミコロンの必要性が ( ... ) の場合とは異なるので却下かもしれませんが。
またセミコロンの微妙な差ですか、セミコロンもうイヤッ。
邪悪でしょう。
JavaScript の場合と同様に (CGIなどでは)セキュリティホールの
温床ですし。それに他に代替手段があるのに安易にメタなレベルの
機能に頼ってしまうのはちょっと気が進みません。
まあシェルの場合 eval しか手がないというケースも結構ありますが。
> 他に代替手段があるのに安易にメタなレベルの機能に頼ってしまうのはちょっと気が進みません。
えっ、そっ、そうですかぁ。
う、えっと、そうでもないんでしょうか?
メタレベルとの行き来をするところは、限定/局所化されてないとちょっと気持ちが悪いという感覚があるんですが、これって特殊?
> これって特殊?
いや、ぼくのほうが特殊かもしれません。evalやapplyがあれば無頓着に使いますからね。