読者です 読者をやめる 読者になる 読者になる

archive管理を適当にやった話

sh

あれだ。面倒なのでコードだけ乗っける

#!/bin/bash
DATE=$(date +%F)
WORKDIR=./
ARCHIVE=${WORKDIR}/archives
LOGFILE=${ARCHIVE}/.log

function archive_less {
	 TIME=""
	 while :
	 do
	     echo -n "When the article written?([ENTER] to display list): ";
	     read TIME;
	     if [[ ${TIME} != "" ]] ; then
		 break
	     fi
	     tail_log;
	 done
	 less ./archives/blog-${TIME}.txt
}

function tail_log {
	 tail ${LOGFILE}
}

function make_commit {
	./hatenaencode.scm blog.txt
	cp blog.txt ./archives/blog-${DATE}.txt
	cp blog.txt-converted ./archives/blog-${DATE}.txt-converted
	
	TITLE=$(head -1 blog.txt)
	if [[ $(grep ${DATE} ${LOGFILE}) == "" ]] ; then
	   echo "${DATE}: ${TITLE}" >> ${LOGFILE}
	else
	   sed -i '/${DATE}/c ${DATE}: ${TITLE}' ${LOGFILE}
	fi
}

function clean {
	cat /dev/null > blog.txt
	rm -f blog.txt-converted
}

function usage {
    echo "Bad Usage $1 -- Use -h or --help for usage"
}

function help {
    echo "Usage: $0 [OPTION]..."
    echo "Add FILE in archive directory"
    echo "Available options:"
    echo "make, --make       compile file and move file to archive dir"
    echo "less, --less       see archives. Specify files by yyyy-mm-dd"
    echo "log, --log         show tail of log file"
    echo "-h, --help         display this menu"
    echo "clean, --clean     clean all blog.txt"
}

while [[ "$1" != "" ]] ;
do
    case $1 in
	'make' | '--make' )
	    make_commit ;;
	'less' | '--less' )
	    archive_less ;;
	'log' | '--log' )
	    tail_log ;;
	'clean' | '--clean' )
	    clean ;;
	'-h' | '--help' )
	    help;
	    exit 1;;
	* )
	    usage $1;
            exit 1;;
    esac
    shift;
done

使い方はworkdirに適当にhogeとか名前を付けておいてshellにて

% ./hoge [make | less | log | clean]

とするとblog.txtに書いてある内容が前々回のコードhatenaencode.scmを通してarchiveに登録されます。
なお同じ日の投稿は上書きされます注意。
記事の下書きとかありません、バックアップも無いです。
一応logに書いた日とその記事の一行目が残るようにしました。
lessするとinteractiveに書いた日付を入れるとarchiveからとって来てくれます。
いや、直接./archivesの中見て補完で捜したほうが…って突っ込みはなしで。
一応今回は必要なかったオプション引数的なことも意識したので、

% ./hoge make && ./hoge clean
% ./hoge make clean

は効果としてほぼ同じで二度手間は避けれる仕様です(オプション使うならgetopts使えという突っ込みもなし)。
最近すげークソみたいなコードばっか書いてる。