サクっとファイルのバックアップを取る

configファイルを変更するときには

# cp -p httpd.conf httpd.conf.070628

こんな感じで、「ファイル名+日付」等でバックアップを取りますよね*1
けどこれが意外とめんどくさい。

  • 今日何日だっけ?
  • あ、既に今日の日付でバックアップ取ってるな。後ろに数字付け足すか

みたいなこと考えないといけないし。あと、古いSolarisでtab補完効かなかったりすると余計にめんどい。(shellの設定が悪いだけかもしんないけど)


おまけに、形式が決まってない*2ので、人によってファイル名がすげーバラバラだったり。

  1. httpd.conf.070627
  2. httpd.conf.20070627
  3. httpd.conf_20070626


ということでサクっと関数を作ろう。

function bk (){

  if [ $# -ne 1 ]; then
    echo "bk: missing file operand"
    return 1
  fi

  FILENAME=$1
  CNT=02
  BACKUP=$FILENAME.`date +%Y%m%d`

  if [ ! -f $BACKUP ]; then
    cp -p -R $FILENAME $BACKUP
    return 0
  else
    while [ : ]; do
      if [ -f $BACKUP$CNT ]; then
        CNT=`expr $CNT + 1`
        if [ $CNT -lt 10 ]; then
          CNT=0$CNT
        fi
        continue
      fi
      cp -p -R $FILENAME $BACKUP$CNT
      return 0
    done
  fi
}

こんなので良いかなー。if文まわりにセンスがないのは勘弁してください><

$ bk httpd.conf
$ ls 
httpd.conf  httpd.conf.20070628
$ bk httpd.conf
$ ls
httpd.conf  httpd.conf.20070628  httpd.conf.2007062802

後はこれを/etc/bashrcあたりに忍ばせる :-)


※ 追記
backupって名前も無駄に長いな。bkに変えよう。

  • s/backup/bk/g

*1:subversion使えって言う話もあるけど、それはまた別のお話

*2:個人的にはタイプ数が一番少ない1番が好み