115

目前我只 RSyncDirectories像这样:

* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html

那么我如何rsync像一个文件一样,/var/www/public_html/.htaccess

4

4 回答 4

176

您可以按照与目录相同的方式执行此操作,但您将文件名的完整路径指定为源。在您的示例中:

rsync -avz   --progress  /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/

正如评论中提到的:由于-a包含recurse,一个小错字就可以启动完整的目录树传输,因此更简单的方法可能只是使用-vz,或将其替换为-lptgoD.

于 2013-02-15T04:36:54.653 回答
16

基本语法

rsync options source destination

例子

rsync -az /var/www/public_html/filename root@<remote-ip>:/var/www/public_html

阅读更多

于 2015-02-02T08:42:03.040 回答
14

如果相对于源和目标的根目录,文件路径中的所有目录都已经存在,Michael Place 的答案非常有效。

但是如果你想用这个源路径同步文件怎么办:

/source-root/a/b/文件

到具有以下目标路径的文件:

/目标根/a/b/文件

并且目录ab不存在?

您需要运行 rsync 命令,如下所示:

rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]
于 2014-08-16T18:50:47.213 回答
0

迄今为止,其中两个答案并不完全正确,他们将获得多个文件,而另一个则不是那么简单,这是 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 的顺序很重要。

于 2020-07-19T19:22:47.700 回答