使用rsync插入新子目录时提示目录不存在,为何无法执行?
rsync命令无法正常工作的原因及解决办法
问题场景
现有远程文件系统结构:
├── freshmeat │ └── prime │ ├── A │ └── B
需要将本地freshmeat/prime/c/D同步至远程,让远程新增C/D子目录,预期结构:
├── freshmeat │ └── prime │ ├── A │ └── B │ └── C │ └── D
执行命令rsync -rvzP freshmeat/prime/c/D freshmeat/prime --delete时提示目录不存在,问题出在以下几点:
核心问题
- 未指定远程主机标识:rsync同步远程目录时,目标路径必须包含远程主机信息,格式为
[用户@]远程主机IP/域名:/目标路径。你写的freshmeat/prime会被rsync当作本地路径处理,如果本地没有这个路径,就会报错“目录不存在”。 - 路径逻辑错误:你的源是
freshmeat/prime/c/D,目标写freshmeat/prime的话,就算路径正确,最终会把D目录直接放到远程prime下,而不是你要的C/D层级。 --delete参数误用:这个参数会删除目标目录中源目录没有的内容,要是按你当前的命令执行,远程prime下的A、B目录会被全部删除,完全不符合需求。
正确的同步命令
要实现目标结构,应该同步本地的c目录到远程prime目录下,命令示例:
rsync -rvzP freshmeat/prime/c/ 用户@远程主机:/freshmeat/prime/
- 源路径末尾加斜杠
/,表示同步c目录下的所有内容(包括D)到目标的c目录中; - 目标路径必须带远程主机信息,确保rsync识别为远程同步;
- 移除
--delete参数,避免误删远程已有的A、B目录。
内容的提问来源于stack exchange,提问作者MikeB2019x
相关产品推荐
相关产品推荐

