知道为什么这个 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}
与 完全相同,如 中。$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"