#!/bin/bash
### 定数
readonly LIST=backup.lst # バックアップ対象リスト
readonly LOG=backup.log # バックアップ結果ログ
### 変数
INF_COUNT=0 # バックアップ成功数
ERR_COUNT=0 # バックアップ失敗数
YMDHMS=$(date +"%Y%m%d%H%M%S") # 現在年月日時分秒
### リストファイル確認
if [[ ! -r "$LIST" ]]
then
echo "ERR [$LIST] リストファイルが存在しない" >> $LOG 2>&1
exit 1
fi
### リストファイル読み込み
while read target pattern backup option dummy
do
### コメントまたは空白の場合は読み飛ばす
if [[ "$target" == \#* ]] || [[ -z "$target" ]]
then
continue
fi
### パラメーター不正
if [[ "$pattern" == \#* ]] || [[ -z "$pattern" ]] || \
[[ "$backup" == \#* ]] || [[ -z "$backup" ]] || \
[[ "$option" == \#* ]] || [[ -z "$option" ]]
then
(( ERR_COUNT++ ))
echo "ERR [$target][$pattern][$backup][$option] パラメーター不正" >> $LOG 2>&1
continue
fi
### バックアップ先ディレクトリ確認
if [[ ! -d "$backup" ]]
then
(( ERR_COUNT++ ))
echo "ERR [$backup] ディレクトリーなし" >> $LOG 2>&1
continue
fi
### バックアップ対象ファイル取得
files=$(ls -1 $target/$pattern 2>/dev/null)
### 該当ファイルチェック
if [[ -z "$files" ]]
then
echo "WAR [$target/$pattern] 該当ファイルなし" >> $LOG 2>&1
continue
fi
### オプション毎のコマンドを作成
for buf in $files
do
case "$option" in
c) # コピーのみ
cmd_cpy="/bin/cp -p $buf $backup/$(basename $buf).$YMDHMS"
cmd_del=""
;;
d) # コピー後に削除
cmd_cpy="/bin/cp -p $buf $backup/$(basename $buf).$YMDHMS"
cmd_del="/bin/rm -f $buf"
;;
*) # オプション不正
(( ERR_COUNT++ ))
echo "ERR [$target/$pattern][$option] オプション不正" >> $LOG 2>&1
break
;;
esac
### バックアップコマンド実行
$cmd_cpy > /dev/null 2>&1
if (( $? == 0 ))
then
(( INF_COUNT++ ))
echo "INF CPY $buf" >> $LOG 2>&1
### 削除コマンド確認
if [[ -z "$cmd_del" ]]
then
continue
fi
### 削除コマンド実行
$cmd_del > /dev/null 2>&1
if (( $? == 0 ))
then
echo "INF DEL $buf" >> $LOG 2>&1
else
(( ERR_COUNT++ ))
echo "ERR DEL $buf" >> $LOG 2>&1
fi
else
(( ERR_COUNT++ ))
echo "ERR CPY $buf" >> $LOG 2>&1
fi
done
done < "$LIST"
### 総合エラーチェック
echo "INF バックアップ数=[$INF_COUNT] バックアップエラー数=[$ERR_COUNT]" >> $LOG 2>&1
### 終了処理
if (( ERR_COUNT == 0 ))
then
exit 0
else
exit 1
fi