#!/bin/bash
TEST=
#転送元のホスト名とバックアップのあるディレクトリ
SRC_HOST=192.168.1.1
SRC_BACKUP=/backup

#転送したいバックアップ名
TARGET=target

#スナップショットの一時転送先・一番古い日付のデータをtarかなんかで転送しておくと良いかも
SNAPSHOT=/snapshot/

#転送先ディレクトリ
DEST_BACKUP=/opt/backup

#転送する日付の一覧を得る
LIST=`ssh $SRC_HOST "cd ${SRC_BACKUP} ; find . -maxdepth 3 -type d -path '*/????/??/??' | sort"`

TEMPNAME=${DEST_BACKUP}/_tmpLATEST
for i in ${LIST}
do
  t=`echo ${i} | sed 's/^\.\///'`
  echo target ${t}...
  $TEST rsync -au --delete ${SRC_HOST}:${SRC_BACKUP}/${t}/${TARGET}/ ${SNAPSHOT}/${TARGET}/
  $TEST pdumpfs /${SNAPSHOT}/${TARGET}/ ${DEST_BACKUP} > /dev/null

  #pdumpfsが作った「最新の」バックアップをいったん別の名前にして退避
  LATEST=`find ${DEST_BACKUP}/ -maxdepth 3 -type d -path '*/????/??/??'|sort|tail -n 1`
  $TEST echo pdumpfs make backup as $LATEST , rename to $TEMPNAME
  $TEST mv $LATEST $TEMPNAME

  #空の「月」ディレクトリができていたら削除
  TO_MONTH=`echo ${t} | sed 's/...$//'`
  LATEST_M=`find ${DEST_BACKUP}/ -maxdepth 2 -type d -path '*/????/??'|sort|tail -n 1`
  LS_LATEST_M=`ls ${LATEST_M}`
  [ "${LS_LATEST_M}" = "" ] && $TEST rmdir ${LATEST_M} && echo remove empty directory: ${LATEST_M}

  #退避しておいたバックアップを元々の名前に再配置
  [ ! -d ${TO_MONTH} ] && $TEST mkdir -p ${DEST_BACKUP}/${TO_MONTH} && echo create month directory: ${TO_MONTH}
  $TEST mv ${TEMPNAME} ${DEST_BACKUP}/${t} && echo rename ${TEMPNAME} to $DEST_BACKUP/${t}
done

