如何在 Gradle 中区分 files/folders?

How to diff files/folders in Gradle?

我需要在 Gradle 中编写一个脚本,将 2 个文件夹作为输入。 这两个文件夹都包含 <1000 个结构相当相似的文件(主要是图像)。 输出应该是更改的文件列表以及它有什么样的差异(添加 file/deleted file/changed 文件)。

编辑:这是一个示例脚本 https://gist.github.com/igormukhin/71d780c4274336eeb297。唯一的问题是它按时间戳进行比较。

我很想使用 diff:

def process = 'diff x y'.execute()

然后您可以以文本形式访问命令的输出:

println process.err.text
println process.in.text

并通过以下方式获取退出状态:

int status = process.waitFor()

许多常见的操作系统都会安装 diff,但 Windows 可能不会。

我最近编写了与您要求的内容类似的代码:DirectoryDifferenceCollector;但是,它实际上比较文件的内容(作为哈希)而不是时间戳。如果适合您的需要,我愿意更新它以接受可配置的策略,或者您可以只使用所涉及的概念。

基本上它会扫描两个目录并确定 A 和 B 中丢失的文件,然后它还会确定两个目录共有但内容不同的文件。

结果收集在 DirectoryDifference 对象中,每个类别都有各自的文件路径。