目前我只 RSyncDirectories
像这样:
* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html
那么我如何rsync
像一个文件一样,/var/www/public_html/.htaccess
?
您可以按照与目录相同的方式执行此操作,但您将文件名的完整路径指定为源。在您的示例中:
rsync -avz --progress /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/
正如评论中提到的:由于-a
包含recurse,一个小错字就可以启动完整的目录树传输,因此更简单的方法可能只是使用-vz
,或将其替换为-lptgoD
.
基本语法
rsync options source destination
例子
rsync -az /var/www/public_html/filename root@<remote-ip>:/var/www/public_html
如果相对于源和目标的根目录,文件路径中的所有目录都已经存在,Michael Place 的答案非常有效。
但是如果你想用这个源路径同步文件怎么办:
/source-root/a/b/文件
到具有以下目标路径的文件:
/目标根/a/b/文件
并且目录a和b不存在?
您需要运行 rsync 命令,如下所示:
rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]
迄今为止,其中两个答案并不完全正确,他们将获得多个文件,而另一个则不是那么简单,这是 IMO 的一个更简单的答案。
下面只得到一个文件,但你必须用 mkdir 创建 dest 目录。这可能是最快的选择:
mkdir -p ./local/path/to/file
rsync user@remote:/remote/path/to/file/ -zarv --include "filename" --exclude "*" ./local/path/to/file/
如果 /remote/path 中只有一个文件实例,则如果您执行以下操作,rsync 可以为您创建目录。这可能会花费更多时间,因为它会搜索更多目录。另外,它将为 /remote/path 中不在 ./local 中的目录创建空目录
cd ./local
rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .
请记住 --include 和 --exclude 的顺序很重要。