我的目标:给出本地服务器上的文件列表,显示与远程服务器上具有相同绝对路径的文件的任何差异;例如,将本地 /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
祝你好运