rsync没有同步.htaccess文件

San*_*oid 82 unix linux shell rsync wildcard

我正在尝试rsync server1的目录A与server2的目录B.

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

rsync -av * server2::sharename/B
Run Code Online (Sandbox Code Playgroud)

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

我也尝试了以下命令:

rsync -av --include=".htaccess" * server2::sharename/B
Run Code Online (Sandbox Code Playgroud)

但结果是一样的.

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

谢谢

Ada*_*man 101

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

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

rsync -av . server2::sharename/B
Run Code Online (Sandbox Code Playgroud)

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

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

shopt -s dotglob
Run Code Online (Sandbox Code Playgroud)

另见shopt联机帮助页.

  • 确实 '.' 解决了这个问题,例如`rsync -avz user@domain.com:/ remote/path /./ destination/path`完成这项工作 (5认同)

Bri*_*acy 47

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

rsync -avz -e ssh --progress user@source-server:/somedirA/ somedirB/
Run Code Online (Sandbox Code Playgroud)

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


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

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


har*_*guy 22

我遇到过同样的问题.

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

rsync -av /home/user1 server02:/home/user1
Run Code Online (Sandbox Code Playgroud)

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

rsync -av /home/user1/ server02:/home/user1/
Run Code Online (Sandbox Code Playgroud)

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