检查一个文件夹中的哪些文件在另一个文件夹中丢失了?

检查一个文件夹中的哪些文件在另一个文件夹中丢失了?

当将照片从不同来源复制到我的主存档时,我只想复制存档中尚未存在的文件。rsync 或文件比较应用程序(如 WinMerge 和 Meld)似乎无法检查文件是否已经以不同的名称或在不同子文件夹中存在。首先将所有新源照片复制到存档,然后删除重复项,然后整理文件,这似乎是额外的工作。

有没有办法检查源文件夹中的哪些文件在目标文件夹中找不到?子文件夹也应该检查。文件可以有不同的名称或不同的位置。

答案1

使用findwithmd5sum获取源和目标中所有文件的校验和,然后使用comm查找目标中缺少的校验和。

或者您可以尝试一下-y选项rsync

答案2

如何做到这一点取决于您的图像文件是否按位相同,或者仅在视觉上相似(例如,因为它们可能有不同的注释或被重新压缩,裁剪......)。

如果文件相同,并且您可以在源文件和存档中重命名它们,则很容易将它们重命名为始终具有相同的名称。您可以将旧名称保留为符号链接。未经测试:

for orig in *.jpg; do
  canon=$(<"$orig" md5sum | sed 's/ .*//').jpg
  mv -i "$orig" "$canon"
  ln -s "$canon" "$orig"
done

这假设您的存档是一个目录。如果有子目录,您需要更改*.jpg**/*.jpg(需要 bash 4 或 zsh),并安排将适当数量的添加../ln命令中。

此后,rsync 将仅复制新照片的内容和名称以及现有照片的新名称。

如果您只能重命名档案中的文件,那么您仍然可以通过巧妙地使用符号链接来安排一些事情,也许rsync --copy-unsafe-links……

如果文件只是在视觉上相似,那就更复杂了,而且不可能有完全自动化的答案(在裁剪版本和低质量版本之间,必须由人类做出选择)。一些比较视觉上相似的图像的工具可能会有所帮助,例如浏览(交互式)或查找重复图片(命令行)。

请注意,由于您没有指定您的操作系统,我提出了适用于我的操作系统的建议。它们适用于任何类 Unix 系统,包括 OSX 和 Cygwin。符号链接的想法也可以在 Windows XP 及更新版本(甚至更早版本)上原生运行,但需要安装其他工具。

答案3

整体 ”不同的名称或不同的子文件夹中“事情可能有点难以弄清楚......当然你可以做哈希比较,但随着目标目录的增长,进行合并的时间也会增加。

它不是很花哨,但是使用像 Robocopy for Windows 这样的程序怎么样?

robocopy /E source destination

相关内容