如何直观地比较两个大目录?

如何直观地比较两个大目录?

我有一个庞大的目录,里面有各种各样的东西,从家庭照片到 git 存储库,再到包含数千个可见和隐藏文件的程序,这些文件在大约 10 台计算机上同步。为了使这个庞大的目录在所有这些计算机上保持同步,我不得不从 Dropbox 转移到 Nextcloud。

我发现在这次迁移中 Nextcloud 删除了大量文件,从隐藏文件到.tex文件,应有尽有。我仍在尝试了解为什么会发生这种情况,并在相应的 Nextcloud 论坛上进行了询问,幸运的是,我有一份备份Dropbox目录。

所以...

鉴于我有这两个庞大而复杂的目录,其中包含数百万个文件,我如何从人的角度直观地比较它们,以了解 Nextcloud 造成的损害?我如何了解 Nextcloud 正在消除什么?

基本上,我需要一些大而清晰且直观的东西,就像gdmap混合的那样tkdirdiff

我请求指导和建议。

答案1

当我从本地存储转移到 NAS 时,我也遇到了同样的情况:尺寸有差异我做了以下事情:

stat -c "%s %n" /media/Data/ > /tmp/DSK
stat -c "%s %n" /media/NAS/ > /tmp/NAS

分别列出所有文件的大小(%s)和名称(%n),然后加载DSKNAS我最喜欢的编辑并从视觉上比较了两个文件。

就我而言,只有一个文件不同在我写这篇文章的时候它正在复制,但是在你的情况下你可能需要删除文件的目录名:

sed 's/\/media\/Data//g' /tmp/DSK > /tmp/DSK_Files
sed 's/\/media\/NAS//g'  /tmp/NAS > /tmp/NAS_Files

并让 shell 找出差异:

diff --context=0 /tmp/DSK_Files /tmp/NAS_Files

答案2

有了数百万个文件,我将创建一个校验和在每个 NextCloud 文件上。

然后我将每个校验和添加到SQLite数据库。

然后我会编写一个脚本来扫描客户端目录中的每个文件。此脚本将在包含图像/视频的 10 台计算机上分别运行:

  • 为每个文件生成校验和。
  • 在 SQLite 数据库中查找校验和。
  • 如果未找到校验和,则将文件复制到 Nextcloud。

我会不是根据日期和时间比较文件,因为它们可能在 Nextcloud 填充时发生了变化。

答案3

对于数百万个文件,您确实不想对差异进行目视检查。meld 程序适用于较少数量的文件,但您应该考虑使用 sort 和 uniq 进行报告。从公共目录起点准备列表,以便路径相同(find . 将生成此类终止路径列表),将两个列表一起排序,并使用 uniq 报告非重复行。(确保所有 uniq 文件都来自一个列表,而不是混合在两个列表中)。决定如何将丢失的文件复制到另一个位置。

相关内容