rsync 声明不同的文件,但 diff 不声明?

sdb*_*bbs 7 diff rsync

我在本地和服务器上都有一个文件。我首先尝试rsync在“dry-run”模式下运行,看看文件之间是否存在一些差异:

$ rsync -aP --dry-run USER@192.168.0.55:/home/dir .
USER@192.168.0.55's password: 
receiving incremental file list
dir/myfile.txt
Run Code Online (Sandbox Code Playgroud)

这显然意味着该文件dir/myfile.txt不同,因为它将被更新。然后我用以下命令检查相同的文件diff

$ ssh USER@192.168.0.55 'cat /home/dir/myfile.txt' | diff --report-identical-files - dir/myfile.txt
USER@192.168.0.55's password: 
Files - and dir/myfile.txt are identical
Run Code Online (Sandbox Code Playgroud)

因此,显然这些文件是相同的。

为什么rsync要更新这个文件 - 我如何从命令行确认原因?

Tho*_*key 7

rsync将报告更改

  • 权限差异
  • 时间戳差异
  • 内容(和文件大小)差异

@roaima 在评论中指出,在rsync 手册页中有一个选项可以给出这些更改的摘要:

-i, --itemize-changes       output a change-summary for all updates
Run Code Online (Sandbox Code Playgroud)

可能会发现它很有用,尽管摘要很简洁并且(在我手头的版本中)仅报告类型文件、链接或目录)和名称。以下是我在 Debian 7 和测试机器上使用 rsync 3.0.9-4 和 3.1.1-3 看到的情况:

cd+++++++++ backup-invisible-island/
>f+++++++++ backup-invisible-island/.bash_history
cL+++++++++ backup-invisible-island/conf -> ../system/invisible-island.net/conf
cL+++++++++ backup-invisible-island/statistics -> ../system/invisible-island.net/statistics
cd+++++++++ backup-invisible-island/anon_ftp/
cL+++++++++ backup-invisible-island/anon_ftp/AdaCurses -> pub/AdaCurses
cL+++++++++ backup-invisible-island/anon_ftp/DEBS -> pub/DEBS
cL+++++++++ backup-invisible-island/anon_ftp/GIT -> pub/GIT
Run Code Online (Sandbox Code Playgroud)

对于我自己的使用而言,目录时间戳的更改相对不重要。我使用的脚本仅显示已更改的文件:

rsync:显示何时覆盖目标上的较新文件

  • @sdbbs 添加 `--itemize-changes` (或 `-i`)标志。它将报告所需更改集的摘要。在我自己的场景中,它显示两个 **f** 文件的 `>f..t......`,除了文件 **t**imestamp 之外,它们是相同的 (3认同)