이 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_USER
REMOTE_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"