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

2024年 4月 19日 120.7k 0

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

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

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

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

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

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

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

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

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

    viddiff工具介绍

    vddiff(vim 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 列组成:

  • 第一列,代表了对比差异的类型,有以下 7 种类型:
    • ' ':说明对比结果无差异;
    • '!':说明对比结果有不同;
    • '<':说明文件只存在于第一个目录中;
    • '>':说明文件只存在于第二个目录中;
    • '=':说明 2 个文件的 inode 号相同;
    • '-':对比有错误;
    • 'X':在两列模式中,说明文件类型不同。
  • 第二列,指明了有差异的文件名。
  • 仅显示 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 的安装和使用方法。

    • 您的支持是我写作的最大动力!如果这篇文章对您有帮助,感谢点赞和关注;

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论