我正在尝试将server1的目录A与server2的目录B进行rsync。
在server1的目录A中,我运行了以下命令。
rsync -av * server2::sharename/B
但有趣的是,它会同步除.htaccess或A目录中的任何隐藏文件之外的所有文件和目录。子目录中的任何隐藏文件都会被同步。
我还尝试了以下命令:
rsync -av --include=".htaccess" * server2::sharename/B
但结果是一样的。
有没有什么想法可以解释为什么A目录的隐藏文件无法同步,以及如何修复它。我以超级用户身份运行。
谢谢
6条答案
按热度按时间svujldwt1#
这是因为
*
默认情况下展开到当前工作目录中的所有文件,名称以点开头的文件除外。因此,rsync
从不将这些文件作为参数接收。您可以将表示当前工作目录的
.
传递给rsync
:这样,
rsync
将在当前工作目录中查找要传输的文件,而不是在*
扩展到的目录中查找它们。或者,您可以使用以下命令将
*
扩展到所有文件,包括以点开头的文件:另请参见shopt manpage。
nhn9ugyo2#
对于试图在服务器之间同步目录(包括所有隐藏文件)的任何人--例如,将
source-server
上的somedirA
同步到目标服务器上的somedirB
--尝试以下操作:**注意两个路径末尾的斜杠。**任何其他语法都可能导致意外结果!
此外,对我来说,从目标服务器执行
rsync
命令最容易,因为这样更容易确保我具有适当的写访问权限(即,我可能需要将sudo
添加到上面的命令中)。可能不用说,但显然您的远程用户还需要对源服务器上的
somedirA
具有读取访问权限。:)qc6wkl3g3#
我也有同样的问题。
对于我来说,当我执行以下命令时,隐藏的文件没有得到rsync
但当我在路径末尾添加斜杠时,隐藏的文件被重新同步。
注意路径末尾的斜杠,正如布莱恩·莱西所说,斜杠是关键。我没有资格对他的帖子发表评论,否则我会这么做的。
ivqmmu1c4#
我认为这个问题是由于外壳通配符扩展造成的。使用。而不是星星。
请考虑以下示例目录内容
外壳的通配符扩展转换rsync程序从中获取的参数列表
vt.进入,进入
在命令开始执行之前。
rslzwgfq5#
*
告诉rsynch不同步隐藏文件。你不应该省略它。2hh7jdfx6#
在相关的注解中,如果有人试图从谷歌等公司找到而
rsync
没有复制隐藏子文件夹,我发现了另一个可能发生这种情况的原因,并计算出我会把它转发给下一个遇到同样事情的人:如果你使用-C
选项(显然--exclude
也会这样做,但我觉得这个更容易发现)。在我的例子中,我有一个跨计算机复制几个文件夹的脚本,包括一个包含几个git项目的目录,我注意到我无法运行复制的repos中的任何常规
git
命令(是的,通常应该使用git clone
,但这是包括其他内容的更大备份的一部分)。查看脚本后,我发现它正在使用7或8个选项调用rsync
。在谷歌搜索没有找到任何明显的答案后,我开始逐一查看开关。删除
-C
选项后,它可以正常工作。在该脚本中,-C
标志似乎是错误添加的,可能是因为最初使用的是sftp
,而-C
是该工具下与压缩相关的选项。根据
man rsync
,该选项描述为--CVS-EXCLUDE、-C自动忽略文件的方式与CVS相同
由于CVS是一个较旧的版本控制系统,根据手册页的描述,它会以这种方式运行是完全有道理的。