rsync不同步.htaccess文件


91

我正在尝试将server1的目录A与server2的目录B同步。

我坐在server1的目录A中,运行以下命令。

rsync -av * server2::sharename/B

但是有趣的是,它同步除.htaccess或目录A中任何隐藏文件以外的所有文件和目录。子目录中的所有隐藏文件都将同步。

我还尝试了以下命令:

rsync -av --include=".htaccess" * server2::sharename/B

但是结果是一样的。

为什么A目录的隐藏文件无法同步以及如何修复它的任何想法。我以root用户身份运行。

谢谢


1
:我有你满意的一个答案,你应该接受它meta.stackexchange.com/questions/5234/...
Kutzi

Answers:


109

这是由于以下事实:*默认情况下会扩展到当前工作目录中的所有文件,但名称以点开头的文件除外。因此,rsync永远不要将这些文件作为参数接收。

您可以将.表示当前工作目录的路径传递给rsync

rsync -av . server2::sharename/B

这种方式rsync将在当前工作目录中寻找要传输的文件,而不是在*扩展到的目录中寻找它们。

另外,您可以使用以下命令来*扩展到所有文件,包括以点开头的文件:

shopt -s dotglob

另请参见shopt联机帮助页


7
确实 '。' 解决问题,例如rsync -avz user@domain.com:/remote/path/. /destination/path完成工作
Mariusz Nowak

56

对于任何人谁只是想同步的目录服务器之间(包括所有隐藏文件) -例如,同步somedirAsource-serversomedirB目标服务器上-试试这个

rsync -avz -e ssh --progress user@source-server:/somedirA/ somedirB/

注意两个路径末尾的斜线。任何其他语法都可能导致意外结果!


另外,对我来说,rsync从目标服务器执行命令最容易,因为这样可以更容易地确保我具有适当的写访问权限(即,可能需要sudo在上面的命令中添加一些内容)。

可能不用说,但是显然您的远程用户还需要somedirA对源服务器上的读取权限。:)


-e标志会同步.htaccess文件吗?
Jesse Burcsik

1
@JesseBurcsik否,-e ssh指定连接的方法。
Tripleee '16

1
您只需要在源代码上加斜杠,目的地就无所谓
Jonas Stensved '16

28

我遇到过同样的问题。

对我来说,当我做了下面的命令隐藏的文件并没有得到rsync'ed

rsync -av /home/user1 server02:/home/user1

但是,当我在路径的末尾添加斜杠时,隐藏文件被rsync了。

rsync -av /home/user1/ server02:/home/user1/

注意路径末尾的斜线,因为Brian Lacy说斜线是关键。我没有信誉评论他的帖子,否则我会做到的。


1
只需shopt -s dotglob在rsync之前添加到脚本中即可
Pian0_M4n

3

我认为问题是由于外壳通配符扩展引起的。使用 。而不是明星。

考虑以下示例目录内容

$ ls -a .
. .. .htaccess a.html z.js

Shell的通配符扩展转换了rsync程序从中获取的参数列表

-av * server2::sharename/B

进入

-av a.html z.js server2::sharename/B

在命令开始执行之前。


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.