知道为什么这个 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"
并且同步正确。像什么?
该问题已在评论中解决。
该命令没有任何问题
rsync
。相反,远程目录包含实际上并不期望存在的文件。关于命令的简短说明,
这包含许多未引用的变量扩展。为了安全起见,我会把它写成
请注意, using与除非紧随其后的字符是变量名中的有效字符
${variable}
完全相同,如.$variable
${variable}x
在脚本中,如果可能的话,我还会始终使用长选项来记录文档。但这是我个人的看法。而且我可能会使用
--archive
而不是--recursive
, 来同步文件元数据(时间戳等)