Linux 文件夹对比工具 vddiff 介绍

大家好,我是孔令飞,字节跳动云原生开发专家、前腾讯云原生技术专家;《企业级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工具介绍

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

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

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

vddiff工具安装

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

$ 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 个文件夹内容差异

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

$ vddiff -r onex.1 onex.2

-r表示递归对比。对比结果如下:
vddiff对比界面1

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

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

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

执行以下命令:

$ vddiff -rc onex.1 onex.2

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

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

$ vddiff -rn onex.1 onex.2

输出如下:
vddiff对比界面3

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

执行以下命令:

$ vddiff -rF Makefile onex.1 onex.2 

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

对比时打开/关闭大小写

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

$ vddiff -rI onex.1 onex.2

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

$ vddiff -ri onex.1 onex.2

总结

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


  • 您的支持是我写作的最大动力!如果这篇文章对您有帮助,感谢点赞和关注;
  • 关注公众号【令飞编程】,干货不错过。回复【资料】免费获取全套 Go + 云原生学习资料;
  • 33
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值