
시스템 파일을 백업하기 위한 간단한 스크립트를 작성하려고 합니다. 이것이 내가 지금까지 쓴 내용이다:
#!/usr/bin/sh
if [ $UID != 0 ]; then
echo "Please run me as root"
exit 1;
fi
src="/"
dest="/mnt/system_backup/"
rsync --archive \
--acls \
--xattrs \
--hard-links \
--delete \
--verbose \
--filter="merge system_backup.filter" \
$src $dest
이것은 내 system_backup.filter
파일입니다:
# Patterns to exclude
- swapfile
- /dev/*
- /proc/*
- /sys/*
- /tmp/*
- /run/*
- /var/cache/pacman/pkg/*
- /mnt/*
- /lost+found
- /home/*
어떤 이유로 스왑 파일은 백업에서 제외되지 않지만 이 파일에 나열된 다른 디렉터리는 제외됩니다( --dry-run
두 번째 인수로 --verbose
실행하면 로그에서 볼 수 있습니다 ). 스왑 파일을 제외하는 방법은 무엇입니까?
답변1
필터 파일에는 공백에 대한 특별한 요구 사항이 있습니다. 예를 들어 -
선행(대시, 공백) 뒤에모든 것관련 캐릭터다. 여기에는 후행 공백이 포함됩니다.
cat -e system_backup.filter
(POSIX는 아니지만 사용할 수 있음 ) sed -n l system_backup.filter
을 사용하여 필터 파일에서 예기치 않은 공백이 있는지 확인할 수 있습니다. 다음 예제 출력에서는 줄 끝을 나타내는 swapfile
후행 공백 문자를 보여줍니다.$
# Patterns to exclude$
- swapfile $
- /dev/*$
- /proc/*$
- /sys/*$
- /tmp/*$
- /run/*$
- /var/cache/pacman/pkg/*$
- /mnt/*$
- /lost+found$
- /home/*$
잠재적 으로 흥미로운 또 다른 문자는 일반적 ^M
으로 줄 끝에 있으며 Windows 스타일 CR/LF 줄 끝을 표시하는 문자입니다. 예를 들어,\r
sed
- /mnt/*^M$
참고로, 변수를 사용할 때는 변수를 큰따옴표로 묶어야 합니다(공백 등이 포함된 경우). rsync
따라서 명령이 끝나면rsync … "$src" "$dst"