rsync 백업에서 스왑 파일을 제외하는 방법은 무엇입니까?

rsync 백업에서 스왑 파일을 제외하는 방법은 무엇입니까?

시스템 파일을 백업하기 위한 간단한 스크립트를 작성하려고 합니다. 이것이 내가 지금까지 쓴 내용이다:

#!/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 줄 끝을 표시하는 문자입니다. 예를 들어,\rsed

- /mnt/*^M$

참고로, 변수를 사용할 때는 변수를 큰따옴표로 묶어야 합니다(공백 등이 포함된 경우). rsync따라서 명령이 끝나면rsync … "$src" "$dst"

관련 정보