如何RSYNC单个文件



目前我只对Directories进行RSync,如下所示:

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

那么我如何rsync一个像/var/www/public_html/.htaccess这样的文件呢?

使用与创建目录相同的方法,但指定文件名的完整路径作为源。在您的示例中:

rsync -avz   --status=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/file

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

/target-root/a/b/file

目录ab不存在?

您需要运行一个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中不在中的目录创建空目录/本地

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

请记住,include和exclude的顺序很重要。

除了上面的好答案之外,rsync还希望目标是目录,而不是filename。假设您正在将单词列表文件words复制到/tmp,不要这样做:

 rsync -az /user/share/dict/words /tmp/words    # does not work

"cp"可以容忍这种形式,但rsync不能——它会失败,因为它在/tmp/words上看不到目录。剪下目标文件名,它工作:

 rsync -az /user/share/dict/words /tmp

请注意,rsync不会允许您在复制过程中更改文件名,而cp会。

相关内容

  • 没有找到相关文章

最新更新