如何 RSYNC 单个文件?

目前我只同步 Directories:

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

那么我如何 rsync一个单一的文件喜欢,/var/www/public_html/.htaccess

108572 次浏览

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

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

正如注释中提到的那样: 由于 -a包含 recurse,一个小小的输入错误就可能导致完整的目录树传输,因此更简单的方法可能是只使用 -vz,或者用 -lptgoD替换它。

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

但是,如果您想用这个源路径同步一个文件,那么应该怎么做:

/source-root/a/b/file

转换为具有以下目标路径的文件:

/target-root/a/b/file

目录 B不存在?

您需要像下面这样运行 rsync 命令:

rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]

基本语法

rsync options source destination

例子

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

阅读更多

到目前为止,有两个答案并不完全正确,他们会得到不止一个文件,而另一个并不像它可能的那么简单,这里有一个更简单的答案 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 中只有一个 file 实例,那么如果执行以下操作,rsync 可以为您创建目录。这可能会花费更多的时间,因为它会搜索更多的目录。另外,它将为/remote/path 中不在的目录创建空目录。/本地

cd ./local
rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .

请记住——包括和——排除事项的顺序。