Rsync가 제공된 디렉터리 대신 $HOME을 동기화하고 있습니다.

Rsync가 제공된 디렉터리 대신 $HOME을 동기화하고 있습니다.

이 rsync 명령이 제공된 실제 경로 대신 홈 디렉터리의 내용을 동기화하는 이유를 아시나요?

echo "\${REMOTE_STORAGE_PATH}: ${REMOTE_STORAGE_PATH}/files/"

rsync -zqr -e "ssh -p ${REMOTE_PORT}" --delete ${REMOTE_USER}@${REMOTE_SERVER}:"${REMOTE_STORAGE_PATH}/files/" "${FILES_PATH}"

REMOTE_STORAGE_PATH올바른 값( /var/storage)을 사용하면 동기화하려는 파일이 위치합니다 /var/storage/files. 그러나 동기화되는 내용은 내 홈 디렉터리의 내용입니다 REMOTE_USER. 예를 들면...무엇이 원인일까요? 어떤 아이디어가 있나요?

REMOTE_USERREMOTE_STORAGE_PATH디렉토리 및 하위 디렉토리의 소유자입니다 files.

실제로 가장 혼란스러운 부분은 동일한 스크립트에서 거의 바로 직전에 거의 똑같은 코드 줄이 있다는 것입니다.

rsync -zqr -e "ssh -p ${REMOTE_PORT}" --delete --progress ${REMOTE_USER}@${REMOTE_SERVER}:"${REMOTE_STORAGE_PATH}/database.sql" "${DUMPS_PATH}/${TARGET}.sql"

그리고 동기화가 정확합니다. 무엇처럼?

답변1

문제 해결됨댓글에서.

이 명령에는 아무런 문제가 없습니다 rsync. 대신 원격 디렉터리에는 실제로 존재해서는 안 되는 파일이 포함되어 있습니다.


명령에 대한 간략한 설명은 다음과 같습니다.

rsync -zqr \
    -e "ssh -p ${REMOTE_PORT}" \
    --delete \
    ${REMOTE_USER}@${REMOTE_SERVER}:"${REMOTE_STORAGE_PATH}/files/" \
    "${FILES_PATH}"

여기에는 따옴표가 없는 변수 확장이 많이 포함되어 있습니다. 안전을 위해 다음과 같이 쓸 것입니다.

rsync -zqr \
    -e "ssh -p '$REMOTE_PORT'" \
    --delete \
    "$REMOTE_USER@$REMOTE_SERVER:$REMOTE_STORAGE_PATH/files/" \
    "$FILES_PATH"

바로 뒤에 오는 문자가 변수 이름에서 유효한 문자가 아닌 한 using은 ${variable}in과 정확히 동일합니다 .$variable${variable}x

스크립트에서 나는 추가적으로언제나가능하다면 문서화 목적으로 긴 옵션을 사용하십시오. 그러나 이것은 내 개인적인 의견입니다. 아마도 파일 메타데이터(타임스탬프 등)를 동기화하기 위해 --archive대신 를 사용할 것입니다.--recursive

rsync --compress --quiet --archive \
    --rsh="ssh -p '$REMOTE_PORT'" \
    --delete \
    "$REMOTE_USER@$REMOTE_SERVER:$REMOTE_STORAGE_PATH/files/" \
    "$FILES_PATH"

관련 정보