Rsync는 스크립트 내에서 호출되면 다르게 동작합니다.

Rsync는 스크립트 내에서 호출되면 다르게 동작합니다.

그래서 백업 스크립트를 작성 중인데 .iso 파일을 건너뛰고 싶습니다.

명령줄에서 명령을 사용하면 모든 것이 잘 작동합니다.

rsync -a --delete --exclude='*.iso' /home/user/Desktop/Work /mnt/profile/Desktop/

그런데 스크립트에서 사용하려고 하면 "제외" 설정이 적용되지 않고 .iso 파일이 계속 복사됩니다. 스크립트는 다음과 같습니다.

#!/bin/bash
set -e

SRC_DIR="/home/user/Desktop/Work"
DST_MOUNTPOINT="/mnt/profile"
DST_DIR="/mnt/profile/Desktop/"
OPTIONS=" --exclude='*.iso' "

mountpoint -q $DST_MOUNTPOINT || mount $DST_MOUNTPOINT

rsync -a --delete $OPTIONS $SRC_DIR $DST_DIR

스크립트를 실행하고 PID를 가져와 /proc/PID/cmdline을 확인하면 제외 설정이 있습니다.

내가 뭘 잘못했나요?

답변1

제외 패턴 주위에 따옴표를 붙입니다.

OPTIONS=" --exclude='*.iso' "
rsync $OPTIONS

여기서는 OPTIONS명령줄에서 인용되지 않았기 때문에 단어 분리가 발생하고 후행 공백이 제거됩니다. 그러나 문자열의 작은따옴표는 그대로 남아 있으며 파일 이름의 시작과 끝에는 따옴표가 있을 수 없으므로 패턴이 일치하지 않습니다.<space>--exclude='*.iso'<space>rsyncrsync

추가 따옴표(및 공백)를 제거하고 변수를 인용하십시오.

OPTIONS="--exclude=*.iso"
rsync "$OPTIONS" "$SRC_DIR" "$DST_DIR"

관련 정보