rsync -c -i 将相同的文件标记为不同的

rsync -c -i 将相同的文件标记为不同的

我的目标:给出本地服务器上的文件列表,显示与远程服务器上具有相同绝对路径的文件的任何差异;例如,将本地 /etc/init.d/apache 与远程服务器上的相同文件进行比较。

对我来说,“差异”意味着不同的校验和。我不关心文件修改时间。我还不想同步文件(暂时);只显示差异。

我有同步本地和远程服务器上都安装了 3.0.6,应该可以满足我的要求。但是,它声称即使校验和相同,本地和远程文件仍然不同。

这是命令行:

$rsync --dry-run -avi --checksum --files-from=/home/me/test.txt --rsync-path="cd / && rsync" /me@remote:/

在哪里:

  • “me” = 我的用户名;“remote” = 远程服务器主机名
  • 当前工作目录是 '/'
  • test.txt 包含一行“/etc/init.d/apache”
  • 操作系统:Linux 2.6.9

跑步校验和在两台服务器上的 /etc/init.d/apache 上执行此操作会产生相同的结果。文件是相同的。

然而,同步输出为:

me@remote's password: 
building file list ... done
.d..t...... etc/
cd+++++++++ etc/init.d/
<f+++++++++ etc/init.d/apache

sent 93 bytes  received 21 bytes  20.73 bytes/sec
total size is 2374  speedup is 20.82 (DRY RUN)

输出代码(见http://www.samba.org/ftp/rsync/rsync.html)意味着 rsync 认为

  • /etc 除了 mod time 之外都相同
  • /etc/init.d 需要更改
  • /etc/init.d/apache 将被发送到远程服务器

我不明白,使用 --checksum 选项,并且文件具有相同的校验和,rsync 怎么会认为它们是不同的。(我尝试过使用具有相同 mod 时间的其他文件,这些文件没有被标记为不同。)

我确实在 / 中运行了它,并确保(据我所知)它在 / 中远程运行,因此即使是相对路径名仍然是正确的。

我使用 -avvvi 运行 rsync 以获取更多调试信息,但没有看到任何值得注意的信息。

我在想:

  • 即使使用--checksum,rsync 是否仍会查看文件修改时间?
  • 我是否没有正确设置路径?
  • 我究竟做错了什么?

答案1

由于“-a”等同于“-rlptgoD”,所以它仍然在查看 mod 时间(“-t”)。

尝试用“-rlpgoD”替换“-a”,看看效果如何。

答案2

这可能是权限问题。“me@remote”是否有权限读取远程服务器上的 /etc/init.d/apache?

您可能需要在远程 rsync 或本地 rsync 或两者上使用 --fake-super 选项。

答案3

目录具有不同的创建/修改/访问时间、所有者或权限...不要使用 -a 选项并尝试 -r

祝你好运

相关内容