最好的方法来比较(差异)一个完整的目录结构?

什么是比较目录结构的最佳方法?

我有一个使用rsync的备份工具。 我想告诉源和备份之间的确切区别(文件大小和上次更改的date)。

就像是:

Local file Remote file Compare /home/udi/1.txt (date)(size) /home/udi/1.txt (date)(size) EQUAL /home/udi/2.txt (date)(size) /home/udi/2.txt (date)(size) DIFFERENT 

当然,这个工具可以是现成的,也可以是一个python脚本的想法。

非常感谢!

乌迪

你要找的工具是rdiff 。 它像结合rsync和diff一样工作。 它创build一个可以比较或分发的补丁文件。

尝试比较3( Scooter软件 ),其中有Windows和Linux的版本。 一旦你使用它,你可能不想使用任何其他文件比较工具。

如果你不想安装另一个工具…

 for host in host1 host2 do ssh $host ' cd /dir && find . | while read line do ls -l "$line" done ' | sort > /tmp/temp.$host.$$ done diff /tmp/temp.*.$$ | less echo "don't forget to clean up the temp files!" 

是的,它可以用find和exec或者find和xargs来完成,就像在for循环中find一样简单。 而且,你也可以比较diff的输出,所以它说“这个文件在host1上,而不是在host2上”或类似的东西,但在这一点上,你可能只是安装其他人正在谈论的工具…

有些人想要根据不同的原因比较文件系统,所以我会在这里写下我想要的,以及我是如何做到的。

我想了:

  • 比较相同的文件系统与自己,即快照进行更改快照比较
  • 什么文件被添加或删除的列表,不关心内部文件的变化。

我做了什么:

第一个快照( before.sh脚本):

 find / -xdev | sort > fs-before.txt 

第二个快照( after.sh脚本):

 find / -xdev | sort > fs-after.txt 

比较它们( diff.sh脚本):

 diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)' 

好的部分是,这使用几乎默认的系统二进制文件。 根据内容进行比较可以通过传递find一个-exec参数来回显文件path和之后的MD5。

过去我使用过dirdiff来比较目录结构。 它只适用于本地dirs,所以你将不得不sshfs -mount你的其他目录。

好处是你可以直观地看到文件是否平等,哪一个更新或更旧。 它最多支持5个目录。 你也可以看到differencies和从一个到另一个复制文件。

从rsync手册页:

 -n, --dry-run This makes rsync perform a trial run that doesn't make any changes (and produces mostly the same output as a real run). It is most commonly used in combination with the -v, --verbose and/or -i, --itemize-changes options to see what an rsync command is going to do before one actually runs it. 

可能会有所帮助。

我会用Meld的。

除了已经在Windows上提到的工具,你可以使用Total Commander或WinSCP,都有非常舒适的function来比较(和同步)目录。

diff -r实际上工作得很好。 如果你只是想知道文件是否有差异,而不是差异的实际内容,那么做diff -qr