Linux 下的文件夹对比工具 vddiff 介绍

大家好,我是孔令飞,字节跳动云原生开发专家、前腾讯云原生技术专家;《企业级Go项目开发实战》作者,云原生实战营 知识星球星主。欢迎关注我的公众号【令飞编程】,Go、云原生干货不错过。

在大家的日常工作中有没有遇到以下场景?

  1. 需要对比 Linux 服务器上的 2 个 文件夹内容的差异,通过这些差异查看内容是否有变更;
  2. 相比较 2 个文件夹的差异,但是 Linux 系统下只有文件对比工具 vddiff

为了能够对比 2 个文件夹内的文件内容差异,我们要么只能一个一个使用 vddiff对比文件内容。要么,将 2 个文件夹,下载到本地,使用 Windows 或 Mac 系统上的文件夹对比工具进行内容对比。如果文件夹不大,虽然有点麻烦但也能解决问题,但是如果文件夹很大,传输文件会是一个很耗时的过程。

我不知道,你们开发中,有没有经常遇到以上场景。但是,在我的职业生涯中,会频繁遇到以上场景。例如,在开发 OneX项目的过程中,我会引用一些第三方的包,当我进行包更新的时候,为了能更直观的看到包进行了哪些变更,就会使用 vddiff 工具来对比 2 个版本的文件夹。

那么有没有一个好用的 Linux 系统下的文件夹对比工具,方便我们去对比文件夹的内容差异呢?

我为此调研了很多工具,发现没有特别好用的工具。甚至,我曾经基于 ranger 文件管理器,封装了一个 LInux 系统下的文件夹对比工具,但维护起来很麻烦,而且也不易用。

在之后的开发生涯中,又陆陆续续,从 GitHub 上调研此类工具,直到找到了工具 vddiff

vddiff是一个文件夹对比工具,非常轻量、易用,也提供了非常强大的功能。之后,所有的 Linux 系统下的文件夹对比,我都用的是 vddiff,有 6 年之久。

所以,今天我也想把这个 Linux 下的文件夹对比工具分享给你。如果你有更好的 Linux 文件夹对比工具,也环境评论区分享出来。

viddiff工具介绍

vddiffv im d irectory diff ),是一个轻量的基于 Linux 命令行终端的文件夹对比工具。vddiff 使用 vim 来进行实际的内容对比,如果系统中没有安装 vim,则会使用 diff file_1 file_2 | less命令,来对比文件内容。vddiff 工具只会对比普通文件和符号链接文件,支持通过 -r 选项递归对比文件夹内容。

vddiff工具还可以对比压缩文件,工具会自动根据文件名后缀,如:bz2gztartbztgztxzxzzipZ,来判断是否是压缩文件,如果是压缩文件,则会先解压再对比。但,我更建议的使用方式是自己手动在 Linux 系统下解压压缩文件,再用 vddiff 工具进行对比,直接对比压缩文件,有时候会导致 Linux 终端输出紊乱。

下面,我来介绍下 vddiff 工具常用的功能。

vddiff工具安装

要使用 vddiff工具,首先需要安装 vddiff。安装方法,很简单,只需执行以下几条简单的命令即可:

bash 复制代码
$ git clone https://github.com/n-t-roff/vddiff /tmp/vddiff # 克隆源代码
$ cd /tmp/vddiff/
$ ./configure
$ make # 构建 vddiff 工具的部署二进制文件
$ sudo make install # 安装 vddiff 工具

vddiff 工具使用指南

虽然 vddiff工具很清凉,但还是支持了不少文件夹对比功能。具体可以通过 man vddiff命令查看其支持的所有命令行选项。因为命令行选项很多,有些并不常用,这里列举一些高频的使用方式。

递归对比 2 个文件夹内容差异

这是使用最频繁、最核心的一个功能。我们可以执行以下命令来对比:

bash 复制代码
$ vddiff -r onex.1 onex.2

-r表示递归对比。对比结果如下:

可以看到,输出结果其实是由 2 列组成:

  1. 第一列,代表了对比差异的类型,有以下 7 种类型:
    • ' ':说明对比结果无差异;
    • '!':说明对比结果有不同;
    • '<':说明文件只存在于第一个目录中;
    • '>':说明文件只存在于第二个目录中;
    • '=':说明 2 个文件的 inode 号相同;
    • '-':对比有错误;
    • 'X':在两列模式中,说明文件类型不同。
  2. 第二列,指明了有差异的文件名。

仅显示 2 个目录中都存在的目录和不同的文件

执行以下命令:

bash 复制代码
$ vddiff -rc onex.1 onex.2

-c选项,用来设置对比结果中只展示 2 个对比目录中都存在的目录和不同的文件。输出如下: 通过 -c选项可以让我们更快、更直观的看到不一样的文件和目录。可以直接在差异文件上,键入 Enter 键盘,就会进入到对比界面,查看差异点,例如:在 .go-version文件上键入 Enter 进入对比界面,如下: 默认用 vimdiff命令来对比 2 个文件。键入::qall从对比界面返回。

注意,-c只会显示有差异的文件或文件夹,不会显示文件会否存在 A,不存在于 B 这种场景。如果你想查看 2 个文件夹中,文件是否只存在于 X 文件目录中,可以使用 -n选项,命令如下:

bash 复制代码
$ vddiff -rn onex.1 onex.2

输出如下:

仅显示与模式匹配的文件名

执行以下命令:

bash 复制代码
$ vddiff -rF Makefile onex.1 onex.2 

-F选项,设置 vddiff 工具仅显示与模式匹配的文件名。输出结果如下:

对比时打开/关闭大小写

可执行以下命令,在对比时区分大小写:

bash 复制代码
$ vddiff -rI onex.1 onex.2

可执行以下命令,在对比时不区分大小写:

bash 复制代码
$ vddiff -ri onex.1 onex.2

总结

在 Linux 系统中进行开发、测试、部署等操作时,经常会遇到对比 2 个目录中,文件差异的需求。Windows 或 MacOS 中,有不少易用的文件夹对比工具,但是在 Linux 系统中很缺乏这类工具。为了能够对比 2 个目录,我们经常会把目录下载到 Windows/MacOS 中,进而对比 2 个文件夹,但是这种方式很低效。在 Linux 系统中,我们可以使用 vddiff 工具来对比目录中文件的差异,本文也介绍了 vddiff 的安装和使用方法。


  • 您的支持是我写作的最大动力!如果这篇文章对您有帮助,感谢点赞和关注;
相关推荐
Lill_bin32 分钟前
JVM内部结构解析
jvm·后端·spring cloud·微服务·云原生·ribbon
青云交1 小时前
大数据新视界 --大数据大厂之Kubernetes与大数据:容器化部署的最佳实践
数据库·kubernetes·容器编排·资源管理·大数据处理·扩展性、故障恢复·存储持久化·监控、日志管理、性能提升
二进制杯莫停2 小时前
初识zookeeper
分布式·zookeeper·云原生
StevenZeng学堂3 小时前
【Kubernetes笔记】为什么DNS解析会超时?
网络协议·docker·云原生·kubernetes
爱吃龙利鱼15 小时前
nginx实现https安全访问的详细配置过程
运维·nginx·安全·云原生·https
大白菜和MySQL16 小时前
rockylinux9.4单master节点k8s1.28集群部署
云原生·容器·kubernetes
向往风的男子16 小时前
【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(三十)
学习·容器·kubernetes
蒙娜丽宁19 小时前
Go语言错误处理详解
ios·golang·go·xcode·go1.19
七夜zippoe1 天前
nacos和eureka的区别详解
云原生·eureka
唐大爹1 天前
kubeadm方式安装k8s续:
云原生·容器·kubernetes