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}与 完全相同,如 中。$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"

相关内容