Rsync不同步.htaccess文件

hfwmuf9z  于 2022-10-17  发布在  Unix
关注(0)|答案(6)|浏览(251)

我正在尝试将server1的目录A与server2的目录B进行rsync。
在server1的目录A中,我运行了以下命令。

rsync -av * server2::sharename/B

但有趣的是,它会同步除.htaccess或A目录中的任何隐藏文件之外的所有文件和目录。子目录中的任何隐藏文件都会被同步。
我还尝试了以下命令:

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

但结果是一样的。
有没有什么想法可以解释为什么A目录的隐藏文件无法同步,以及如何修复它。我以超级用户身份运行。
谢谢

svujldwt

svujldwt1#

这是因为*默认情况下展开到当前工作目录中的所有文件,名称以点开头的文件除外。因此,rsync从不将这些文件作为参数接收。
您可以将表示当前工作目录的.传递给rsync

rsync -av . server2::sharename/B

这样,rsync将在当前工作目录中查找要传输的文件,而不是在*扩展到的目录中查找它们。
或者,您可以使用以下命令将*扩展到所有文件,包括以点开头的文件:

shopt -s dotglob

另请参见shopt manpage

nhn9ugyo

nhn9ugyo2#

对于试图在服务器之间同步目录(包括所有隐藏文件)的任何人--例如,将source-server上的somedirA同步到目标服务器上的somedirB--尝试以下操作

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

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

此外,对我来说,从目标服务器执行rsync命令最容易,因为这样更容易确保我具有适当的写访问权限(即,我可能需要将sudo添加到上面的命令中)。
可能不用说,但显然您的远程用户还需要对源服务器上的somedirA具有读取访问权限。:)

qc6wkl3g

qc6wkl3g3#

我也有同样的问题。
对于我来说,当我执行以下命令时,隐藏的文件没有得到rsync

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

但当我在路径末尾添加斜杠时,隐藏的文件被重新同步。

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

注意路径末尾的斜杠,正如布莱恩·莱西所说,斜杠是关键。我没有资格对他的帖子发表评论,否则我会这么做的。

ivqmmu1c

ivqmmu1c4#

我认为这个问题是由于外壳通配符扩展造成的。使用。而不是星星。
请考虑以下示例目录内容

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

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

-av * server2::sharename/B

vt.进入,进入

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

在命令开始执行之前。

rslzwgfq

rslzwgfq5#

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

2hh7jdfx

2hh7jdfx6#

在相关的注解中,如果有人试图从谷歌等公司找到而rsync没有复制隐藏子文件夹,我发现了另一个可能发生这种情况的原因,并计算出我会把它转发给下一个遇到同样事情的人:如果你使用-C选项(显然--exclude也会这样做,但我觉得这个更容易发现)。
在我的例子中,我有一个跨计算机复制几个文件夹的脚本,包括一个包含几个git项目的目录,我注意到我无法运行复制的repos中的任何常规git命令(是的,通常应该使用git clone,但这是包括其他内容的更大备份的一部分)。查看脚本后,我发现它正在使用7或8个选项调用rsync
在谷歌搜索没有找到任何明显的答案后,我开始逐一查看开关。删除-C选项后,它可以正常工作。在该脚本中,-C标志似乎是错误添加的,可能是因为最初使用的是sftp,而-C是该工具下与压缩相关的选项。
根据man rsync,该选项描述为
--CVS-EXCLUDE、-C自动忽略文件的方式与CVS相同
由于CVS是一个较旧的版本控制系统,根据手册页的描述,它会以这种方式运行是完全有道理的。

相关问题