rsync 不同步 .htaccess 文件

Posted

技术标签:

【中文标题】rsync 不同步 .htaccess 文件【英文标题】:rsync not synchronizing .htaccess file 【发布时间】:2012-02-21 05:40:28 【问题描述】:

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

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

rsync -av * server2::sharename/B

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

我还尝试了以下命令:

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

但结果是一样的。

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

谢谢

【问题讨论】:

你对一个答案感到满意,你应该接受它:meta.stackexchange.com/questions/5234/… 【参考方案1】:

* 告诉 rsynch 不要同步隐藏文件。你不应该忽略它。

【讨论】:

【参考方案2】:

我遇到了同样的问题。

对我来说,当我执行以下命令时,隐藏文件没有得到 rsync

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

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

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

注意路径末端的斜线,正如 Brian Lacy 所说的斜线是关键。我没有评论他的帖子的声誉,否则我会这样做。

【讨论】:

只需在 rsync 之前将shopt -s dotglob 添加到您的脚本中 (多年来,我已经把它变成了一条铁律(在许多脚本和场合):尾部斜杠总是在源上,从不在目标上。我什至在包装助手例程中强制执行这一点...... )【参考方案3】:

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

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

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


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

可能不言而喻,但显然您的远程用户还需要对您的源服务器上的somedirA 进行读取访问。 :)

【讨论】:

是 -e 标志将同步 .htaccess 文件吗? @JesseBurcsik 不,-e ssh 指定了连接方法。 你只需要源斜线,目的地无所谓【参考方案4】:

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

考虑以下示例目录内容

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

shell 的通配符扩展翻译了 rsync 程序从中获取的参数列表

-av * server2::sharename/B

进入

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

在命令开始执行之前。

【讨论】:

【参考方案5】:

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

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

rsync -av . server2::sharename/B

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

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

shopt -s dotglob

另见shopt manpage。

【讨论】:

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

以上是关于rsync 不同步 .htaccess 文件的主要内容,如果未能解决你的问题,请参考以下文章

4-10 Linux 中的文件同步传输 --- rsync

rsync集群间文件同步

Linux之rsync数据同步服务

Linux之rsync数据同步服务

配置 inotify+rsync 实时同步

基于rsync+inotify实现文件实时同步