如何比较目录之间的差异(linux)

如何比较目录之间的差异(linux)

我有两个目录 - 一个来自早期备份,另一个来自最新备份。如何比较 Linux 上最新备份目录中文件的更改?此外,如何显示文本和 php 文件中的更改 - 我正在考虑类似 wikipedia 上的修订历史记录,您可以在屏幕一侧看到旧版本,在另一侧看到最新版本,并且更改会突出显示。我该如何实现这样的功能?

编辑:我该如何比较偏僻的目录与本地?

答案1

来自 diff 手册页:

如果源文件和目标文件都是目录,则 diff 将按字母顺序比较两个目录中的相应文件;除非给出了 -r 或 --recursive 选项,否则此比较不是递归的。diff 永远不会将目录的实际内容当成文件进行比较。完全指定的文件可能不是标准输入,因为标准输入没有名称,并且不适用“同名文件”的概念。

比较目录:diff --brief -r dir1 dir2

要并排比较文件:diff --side-by-side file1 file2

答案2

您确实希望将减少带宽消耗的功能与为您提供灵活性rsync的功能结合起来。diff

像这样:

cp -R $local $bak
rsync $server:$remdir/* $local/
rsync $local/ $server:$remdir/* 
diff -wur $local $bak

我想如果你经常这样做,你可以稍微调整一下,在第一行使用rsync而不是cp—— 显然在最后一行,你可以完全按照diff你喜欢的方式格式化它。在 OP 的案例中,可能使用 y

这种方法的缺点是你最终会使用两倍的本地空间,但成本不到 1 美元/G,谁在乎呢?

答案3

假设:

  • 我们正在进行www1,与远程比较www2
  • 配置了从本地www1到远程的公共 ssh 密钥认证www2
  • 我们比较本地www1和远程的同一用户www2
查找 /var/www/html/-name“*”-exec md5sum -b {} \; | grep -v“/var/www/html/exclude_this dir”> local.md5
ssh www2 “查找 /var/www/html/ -name '*' -exec md5sum -b {} \; | grep -v /var/www/html/exclude_this dir > remote.md5”
scp www2:remote.md5。
差异 本地.md5 远程.md5

答案4

助手高级入侵检测环境 (AIDE) 是 UNIX 操作系统的文件完整性检查器。其目的是提供有关受支持文件系统上数据完整性的报告。通过在目标主机上多次运行 AIDE,您可以确定哪些文件正在更改。通过在不同的主机上多次运行 AIDE,您可以确定哪些文件和权限不同。然后对报告的“不同”文件使用 gui diff 工具。

或者使用 gui 差异工具,如 meld、guiffy、kdiff3、diff、vimdiff、gvimdiff、Emacs、Kompare、Diffuse、Easydiff、TkDiff 或 xxdiff。大多数工具除了文件差异外,还会执行目录差异。您需要使用 NFS、SMBFS 或 SSHFS 安装远程驱动器,正如其他人提到的那样。

相关内容