如何配置rsync以在远程服务器上创建目标目录?
问题的原因是,旧版本的rsync工具没有提供一个选项来在远程服务器上创建目标目录。解决方法是使用rsync 3.2.3版本及更高版本中添加的--mkpath
选项来创建目标目录。这个选项允许用户在同步文件时自动创建目标路径的组成部分。用户只需在源路径和目标路径的末尾都留下一个斜杠,所有递归的文件/文件夹将自动在两者之间同步。
要在旧系统上安装支持--mkpath
选项的rsync 3.2.3版本(不建议用于生产环境),可以参考以下链接:askubuntu.com/questions/1389729/…
问题出现的原因:在使用rsync配置远程服务器时,有时候需要创建目标目录。然而,如果目标目录的层级较多,需要使用一些技巧来解决该问题,否则rsync命令可能会报错。
解决方法1:可以先运行一个独立的ssh ... mkdir -p
命令来创建目标目录,然后再运行rsync命令。具体命令如下:
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user:/tmp/x/y/z/
解决方法2:可以使用--relative
选项,只需指定目标目录的根目录,无需指定源目录的目录结构,rsync命令会自动创建相应目录。具体命令如下:
rsync -a --relative /new/x/y/z/ user:/pre_existing/dir/
解决方法3:如果只想要创建"y/z/"目录,而不是在"new/x/"目录下创建,可以在想要使用--relative
的地方添加./
。具体命令如下:
rsync -a --relative /new/x/./y/z/ user:/pre_existing/dir/
解决方法4:如果服务器上没有mkdir
命令,可以使用如下hack方法:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
。虽然会创建一个额外的文件,但可以之后再删除。
解决方法5:如果在使用--rsync-path
选项时出现错误,可以尝试对&&
进行转义处理。
解决方法6:如果以上方法都无法解决问题,可以参考相关链接中的其他解决方案。
通过以上几种方法,可以解决使用rsync配置远程服务器时需要创建目标目录的问题。具体的解决方法根据不同情况选择,可以根据实际需要来配置rsync命令。