ファイルをバックアップするプログラムを作る

多くのOSに対応するプログラムは単純であるべきだと考え、shellで組む。
プログラムは、ファイルをバックアップするが、同一の内容のファイルを重複してバックアップしない。

ファイル名: backup.sh
#!/bin/sh

FILE=$1
BACKUP=$2
ARCHIVE=$3

main() {
 if [ ! "$FILE" -o ! "$BACKUP" -o ! "$ARCHIVE" ]; then
  echo -e "$0 FILE BACKUP ARCHIVE"
  return 1
 fi
 DIR=`dirname "$BACKUP"`
 if [ -e "$BACKUP" ]; then
  ERR=`cmp "$FILE" "$BACKUP"`
  if [ ! $ERR ]; then
   return 0
  fi
  ADIR=`dirname "$ARCHIVE"`
  if [ ! -e "$ADIR" ]; then
   mkdir -p "$ADIR"
  fi
  NAME=`basename "$BACKUP"`
  tar -acf "$ARCHIVE" -C "$DIR" "$NAME"
  DATE=`date '+%F'`
  mv "$ARCHIVE" "$ARCHIVE-$DATE"
  rm -f "$BACKUP"
 fi
 if [ ! -e "$DIR" ]; then
  mkdir -p "$DIR"
 fi
 cp -a "$FILE" "$BACKUP"
 return 0
}

main $@ || exit $?
使い方は
sh ./backup.sh {バックアップするファイル名} {バックアップ先のファイル名} {アーカイブのファイル名}
2017/10/04 21:08
タグ