rsync:mkdir“2014-11 /。”失败:没有这样的文件或目录(2)

我正在写一个脚本自动化复制文件与rsync从服务器-A到服务器-B这是我的脚本:

#!/bin/bash NOW=$(date +"%Y-%m") rsync -au --ignore-existing /var/www/uploads/$NOW/* -e [email protected]:/var/www/uploads/$NOW/. 

当我们要在下个月从十月到十一月,我得到这个错误在我的脚本:

`

 rsync: mkdir "/var/www/uploads/2014-11/." failed: No such file or directory (2) rsync error: error in file IO (code 11) at main.c(605) [Receiver=3.0.9] rsync: connection unexpectedly closed (9 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9] 

我应该如何解决这个错误? 请帮帮我

首先,确保目标上的父目录存在。 即[email protected]:/var/www/uploads应该存在。 我认为你的公式,尾随. 是指rsync尝试创build的目录,除非父目录已经存在,否则不能这样做。 即父母是[email protected]:/var/www/uploads/$NOW

其次,认识到rsync的行为与cp在文件名中的后缀“/”有很大的不同。 我发现最安全和最直观的方式就是在所有目录的尾部使用尾部/尾部。 像这样:

 rsync -au --ignore-existing /var/www/uploads/$NOW/ -e [email protected]:/var/www/uploads/$NOW/ 

与cp不同的是,rsync可以可靠地将source参数中的目录内容复制到目标目录的内容中,如果需要的话,创build目标目录(尽pipe父目录必须存在),而不是把源目录(即父目录)目标目录是否已经存在。

这与你所做的稍有不同,因为你这样做会排除名称以.开头的文件. 在源目录中,如果被复制的文件列表太长(如果内存正确地运行,命令行长度大约为32K字符,则bash扩展受限)。

尾部的点需要删除,将脚本更改为:

 rsync -au --ignore-existing /var/www/uploads/$NOW/* -e [email protected]:/var/www/uploads/$NOW