rsync同步到多级嵌套远程目录报错code12,是什么原因导致的?
rsync同步失败问题解答
失败原因
你的猜测是正确的,rsync默认仅支持自动创建目标路径的最后一级目录,不会递归创建不存在的多级父目录。
第二次执行命令时,远程/home/pantelis/目录为空,目标路径/home/pantelis/my-work/terragrunt/modules/的父级目录my-work、my-work/terragrunt均不存在,rsync无法在不存在的路径下创建最末级的modules目录,进而触发rsync协议数据流错误(错误码12)。
--relative参数未生效的原因
--relative(-R)参数需要配合源路径的相对标记使用,才能正确保留并同步目录层级,你之前的用法没有标记需要保留的目录结构起点,因此没有生效。
可行解决方案
- 方案1:提前创建远程父目录
先通过ssh在远程递归创建所有需要的父目录,再执行rsync同步:
之后再运行你原来的第二条rsync命令即可正常执行。ssh my-server "mkdir -p /home/pantelis/my-work/terragrunt/modules/" - 方案2:正确使用
--relative参数同步完整目录结构
在源路径中用./标记需要保留的目录结构起点,目标路径直接写远程根目录即可,rsync会自动创建所有层级的目录:
执行后会自动在远程生成完整的rsync -zalPR --progress --exclude=.git --exclude=.vscode /Users/pantelis/Workspace/./my-work/terragrunt/modules/ my-server:/home/pantelis//home/pantelis/my-work/terragrunt/modules/路径,内容和本地对应目录完全一致。 - 方案3:通过
--rsync-path参数自动创建父目录
无需提前执行ssh命令,直接在rsync参数中指定远程执行同步前先创建所需目录:rsync -zalP --progress --exclude=.git --exclude=.vscode --rsync-path="mkdir -p /home/pantelis/my-work/terragrunt/modules/ && rsync" /Users/pantelis/Workspace/my-work/terragrunt/modules/ my-server:/home/pantelis/my-work/terragrunt/modules/
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

