日報を自動作成するシェルスクリプトを作ってみた
毎日日報を作っているが、日報は基本的に前日のをコピーしてから編集するだけなので、コピーする動作のみをシェルスクリプトで自動化した。
以下ソース
# 日報自動作成.sh fpath='~/日報/' #日報のファイルパス today=`date +"%Y_%m_%d"` #今日の日付 例:2011_02_28 yesterday=`date -v-1d +"%Y_%m_%d"` #昨日の日付 #ファイルが存在していればコピーしない if [ -e $fpath$today".txt" ] ; then echo "$fpath$today.txtは存在しています" 'exit' else `cp $fpath$yesterday.txt $fpath$today.txt` fi
最後に、`emacs $fpath$today.txt`などを記述すると作成した後にエディタを自動で開くことが可能
ただし、cygwinにはdateコマンドに-vオプションが無いので、Windowsでは使えない。
cygwinならこうなる
# 日報自動作成.sh fpath='~/日報/' #日報のファイルパス today=`date +"%Y_%m_%d"` #今日の日付 例:2011_02_28 yesterday=`date -d "1 days ago" +"%Y_%m_%d"` #昨日の日付 #ファイルが存在していればコピーしない if [ -e $fpath$today".txt" ] ; then echo "$fpath$today.txtは存在しています" else cp "$fpath$yesterday.txt" "$fpath$today.txt" fi
ただしこれでは月曜日に作成できない。その問題を修正する。
以下はMac版
#!/bin/sh fpath='~/日報/' #日報のファイルパス today=`date +"%Y_%m_%d"` #今日の日付 例:2011_02_28 yesterday='' tmp=0 until [ -e $fpath$yesterday".txt" ] do tmp=`expr $tmp + 1` if [ $tmp -eq 30 ] then exit 1 fi yesterday=`date -v-${tmp}d +'%Y_%m_%d'` #昨日の日付 done #ファイルが存在していればコピーしない if [ -e $fpath$today".txt" ] ; then echo "$fpath$today.txtは存在しています" else `cp $fpath$yesterday.txt $fpath$today.txt` fi
後は.emacsに
(defun open-nippou() (defvar nippou "~/") (defvar isFile (shell-command (concat nippou "hello.sh"))) (defvar file_name (concat (format-time-string "%Y_%m_%d") ".txt")) (if (equal isFile 0) (find-file (concat nippou "日報/" file_name )) (message (concat "シェルスクリプトでエラーが発生しました。Cannot Open File:" file_name))) ) (open-nippou)
のようなlispを追加すれば良い。
後はシェル側の日時のフォーマットをlispから選択できるようにしたいなー。
もちろんシェル側にはデフォルトのフォーマットを用意してさ。
うん。すぐできますが、今日はもう寝る