rsync没有同步.htaccess文件

时间:2012-01-28 16:18:12

标签: linux shell unix wildcard rsync

我正在尝试将server1的目录A与server2的目录B进行rsync。

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

rsync -av * server2::sharename/B

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

我也尝试了以下命令:

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

但结果是一样的。

任何想法为什么隐藏A目录的文件没有得到同步以及如何解决它。我以root用户身份运行。

感谢

5 个答案:

答案 0 :(得分:94)

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

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

rsync -av . server2::sharename/B

这样rsync将查找要在当前工作目录中传输的文件,而不是在*扩展到的内容中查找它们。

或者,您可以使用以下命令将*展开到所有文件,包括以点开头的文件:

shopt -s dotglob

另见shopt manpage

答案 1 :(得分:44)

对于那些只是尝试在服务器之间同步目录(包括所有隐藏文件)的人 - 例如,在somedirA上将source-server同步到目标服务器上的somedirB - 试试这个

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

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


另外,对我来说,最容易从目标服务器执行rsync命令,因为它更容易确保我有正确的写访问权限(即,我可能需要将sudo添加到目标服务器上面的命令)。

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

答案 2 :(得分:16)

我有同样的问题。

对我来说,当我执行以下命令时,隐藏文件获取rsync'

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

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

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

注意路径末尾的斜杠,正如Brian Lacy所说斜杠是关键。我没有在他的帖子上发表评论的声誉,或者我会做到这一点。

答案 3 :(得分:3)

我认为问题是由于shell通配符扩展。使用 。而不是明星。

考虑以下示例目录内容

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

shell的通配符扩展转换了rsync程序从

获取的参数列表
-av * server2::sharename/B

-av a.html z.js server2::sharename/B
在命令开始执行之前

答案 4 :(得分:2)

*告诉rsync不同步隐藏文件。你不应该省略它。