如何同步单个文件?


95

目前,我仅RSync-ing之Directories类的:

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

那么,我rsync该如何处理一个文件/var/www/public_html/.htaccess呢?

Answers:


160

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

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

19
另外,如果仅发送一个文件,则可能需要添加“ --progress”参数,以便可以观察其进度。
2014年

这是否意味着您仍需要rsyncd.conf中的模块,且该模块的目录位于文件上方(例如,带有delete选项delete),或者仅指定路径即可将文件上传到服务器上的任何位置吗?手册页对此并不十分清楚。

2
-a包括递归,对于单个文件并不需要,因此不确定我是否对单个文件使用该标志,因为如果文件名偶然成为目录,则可能导致意外行为。
redanimalwar

2
--partial --stats --progress <<如果这些文件非常大,并且在传输中断后可能必须恢复,则这些标志很有用。
Ahi Tuna

16

基本语法

rsync options source destination

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

阅读更多


14

如果相对于源目录和目标目录的根目录,文件路径中的所有目录均已存在,则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]

2
仅将单个文件复制到现有文件夹或预先创建文件夹会更安全吗?对于文件夹或文件夹内容同步,让我们rsync创建所有子文件夹,毕竟这是它的工作,但是在这种特殊情况下,--include参数仅用于复制单个文件是非常麻烦和棘手的。
图兰斯·科尔多瓦

@ user1598390我不确定您在假设或设想哪种情况不太安全,但是如果您想记住此命令的特定形式并且您不经常这样做,那么可能是安全性较低,然后复制单个文件。如果文件很大,可能会更安全,即因为rsync自动处理复制期间可能发生的大多数错误。在某些情况下,我的语法对我特别有用,因为我编写的代码以这种形式生成命令,因此,如果对相关代码进行了充分的测试,这些命令是“安全的”。
肯尼·埃维特

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的顺序很重要。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.