#!/bin/bash
# 실습 #7 ⑤ — rsync 7 패턴 종합 (로컬/원격/--delete/--dry-run/--exclude)
# 실제 데이터 디렉토리 한 개 만들어 7 패턴 실습
set -e

SRC=/tmp/lab07_src
DST=/tmp/lab07_dst
EXCLUDE_LIST="$(dirname "$0")/configs/05_rsync_exclude.list"

# 0) 실습 데이터 셋업
rm -rf $SRC $DST
mkdir -p $SRC/{docs,cache,logs}
echo "원본 문서" > $SRC/docs/report.txt
echo "원본 이미지" > $SRC/docs/photo.png
echo "캐시 1MB" > $SRC/cache/temp.dat
echo "로그 파일" > $SRC/logs/access.log
echo "DB 데이터" > $SRC/data.bin
echo

echo "=== 패턴 1: 로컬 → 로컬 (전체 복사) ==="
rsync -av $SRC/ $DST/
echo

echo "=== 패턴 2: 슬래시 차이 — '/src/' (안의 내용) vs '/src' (자체) ==="
rm -rf $DST/test_with_slash $DST/test_no_slash
rsync -aq $SRC/ $DST/test_with_slash/
rsync -aq $SRC  $DST/test_no_slash/
echo "  /src/  → $(ls $DST/test_with_slash | tr '\n' ' ')"
echo "  /src   → $(ls $DST/test_no_slash | tr '\n' ' ')"
echo

echo "=== 패턴 3: 증분 — 두 번째 실행은 변경분만 ==="
echo "추가 데이터" > $SRC/new_file.txt
rsync -av $SRC/ $DST/ | grep -E "^new_|sent|delta"
echo

echo "=== 패턴 4: dry-run (-n) — 미리보기 ==="
rm $SRC/data.bin
rsync -avn --delete $SRC/ $DST/ | head -10
echo "  (실제 삭제 안 함)"
echo

echo "=== 패턴 5: --delete — 원본에 없는 파일 백업에서 삭제 ==="
rsync -av --delete $SRC/ $DST/ | grep -E "deleting|sent"
echo

echo "=== 패턴 6: --exclude (단일 패턴) ==="
rm -rf $DST/exclude_demo
rsync -av --exclude='*.log' --exclude='cache/' $SRC/ $DST/exclude_demo/
ls -R $DST/exclude_demo
echo

echo "=== 패턴 7: --exclude-from (외부 파일 — configs/05_rsync_exclude.list) ==="
rm -rf $DST/exclude_from
rsync -av --exclude-from="$EXCLUDE_LIST" $SRC/ $DST/exclude_from/
ls -R $DST/exclude_from

echo
echo "→ 정리: rm -rf $SRC $DST"
