我可以通过diff
包运行os
命令来获取两个目录内容之间的差异,如下所示,
command := "diff --brief -r /home/kasun/Documents/Old-directory/ " +
"/home/kasun/Documents/New-directory/"
out, err := exec.Command("sh", "-c", command).Output()
if err != nil {
fmt.Println("error occured")
fmt.Printf("%s", err)
}
fmt.Printf("%s", out)
由于diff
是仅在bash
中可用的命令,因此构建上述代码形成的二进制文件不能用于在Windows
系统中获取差异。有没有其他方法可以实现相同,以便它可以在任何平台上工作,比如使用标准的go库执行diff。提前致谢
答案 0 :(得分:0)
因为diff是仅在bash中可用的命令,所以通过构建上述代码形成的二进制文件不能用于在Windows系统中获取diff
如果你安装(解压缩到你想要的任何地方){} {{}}(如latest Portable Git)
如果将该安装添加到PATH,则确实有diff(将在Go程序中使用)
vonc@VONCAVN7 C:\
> where diff
D:\prgs\git\latest\usr\bin\diff.exe
但如果您不想依赖现有的第三方安装软件(此处为Git),您可以考虑在项目中PortableGit-2.14.1-64-bit.7z.exe
进行销售。
如果确实有spcau/godiff
。
请注意,使用Git 2.17(2018年第二季度),Git可以更好地识别Go,因为“git diff
”和朋友们学习了Go语言源文件的funcname
模式。
diff
implementation for Windows见commit 1dbf0c0(2018年3月1日)
(由Alban Gruin (``)合并于Junio C Hamano -- gitster
--,2018年3月8日)
userdiff
:为Golang添加内置模式这为Golang添加了
xfuncname
和word_regex
模式 流行的编程语言。它还包括测试用例xfuncname
正则表达式(commit 077cde9)和更新的文档。
xfuncname
正则表达式查找函数,结构和接口 虽然Go语言禁止开口支架独立 行,正则表达式不强制,能够匹配func
这样的陈述:func foo(bar int, baz int) { }
测试用例t4018涵盖了这一点。
word_regex
模式查找标识符,整数,浮点数,复数 数字和运算符,根据go规范。
答案 1 :(得分:0)
正确的方法可能是以递归方式遍历目录并检查&匹配每个相应文件的md5校验和。然而,这很乏味,如果您确定您的文件结构不是太大或允许,那么只需创建两个目录的tar gz然后计算&比较tar包上的md5校验和或sha256sum。