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工具介绍

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

  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 + 云原生学习资料;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/313239.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初始Next.js

版本&#xff1a; 本系列next.js基于的是目前最新版本的 v14 版本&#xff0c;需要 Node.js 18.17 及以后版本 创建项目&#xff1a; 最快捷的创建 Next.js 项目的方式是使用 create-next-app脚手架&#xff0c;你只需要运行&#xff1a; npx create-next-applatest&&am…

FinalShell 远程连接 Linux(Ubuntu)系统

Linux 系列教程&#xff1a; VMware 安装配置 Ubuntu&#xff08;最新版、超详细&#xff09;FinalShell 远程连接 Linux&#xff08;Ubuntu&#xff09;系统Ubuntu 系统安装 VS Code 并配置 C 环境 ➡️➡️➡️提出一个问题&#xff1a;为什么使用 FinalShell 连接&#xff0…

Python-VBA函数之旅-filter函数

目录 一、filter函数的常见应用场景&#xff1a; 二、filter函数的使用注意事项&#xff1a; 1、filter函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、相关文章&#xff1a; 个人主页&#xff1a;非风V非雨-CSDN博客 一、filter函数的常见应用…

FY-SA-20237·8-ElectricHealing

Translated from the Scientific American, July/August 2023 issue. Electric Healing (电疗) New bandage zaps and medicates chronic wounds 新型创可贴治疗慢性伤口 Paragraph 1 Some wounds won’t heal by themselves. 翻译&#xff1a;一些伤口不会自愈。 解释&…

phpMyadmin 设置显示完整内容

额外选项这里&#xff0c;默认部分内容改成完整内容 方案&#xff1a; 版本>4.5.4.1&#xff0c;修改文件&#xff1a;config.inc.php&#xff0c;添加一行代码&#xff1a; if ( !isset($_REQUEST[pftext])) $_REQUEST[pftext] F;

双向链表详解

目录 带头双向循环链表带头双向循环链表的实现带头双向循环链表的功能实现创造新节点LTNode* CreateLTNode(LTDataType x)代码 初始化链表LTNode*LTInit(LTNode* phead)代码 打印链表void LTPrint(LTNode* phead)代码 链表尾插void LTPushBack(LTNode* phead, LTDataType x)代码…

OpenHarmony 资源调度之内存管理源码分析

作者&#xff1a;张守忠 1 内存管理简介 内存管理部件位于全局资源调度管控子系统中&#xff0c;基于应用的生命周期状态&#xff0c;更新进程回收优先级列表&#xff0c;通过内存回收、查杀等手段管理系统内存&#xff0c;保障内存供给。 1.1 内存管理框架 内存管理部件主要…

韦东山FreeRTOS学习笔记————freertos工程创建

这里写目录标题 一、freertos.c程序结构二、创建任务函数1、动态创建2、静态创建 三、任务调用 一、freertos.c程序结构 1、头文件 2、宏定义、typedef定义… 3、全局变量定义 以下是静态任务的相关变量配置&#xff0c;相当于正点原子例程里的TASK1、TASK2…任务配置 以下…

微信小程序展示倒计时

html <view class"countdown"> <text>倒计时&#xff1a;</text> <text wx:for"{{countdown}}" wx:key"index">{{item}}</text> </view> ts data: {countdown: [], // 存放倒计时数组 targetTime:…

MSSQL 命令行操作说明 sql server 2022 命令行下进行配置管理

说明&#xff1a;本文的内容是因为我在导入Access2019的 *.accdb 格式的数据时&#xff0c;总是出错的背景下&#xff0c;不得已搜索和整理了一下&#xff0c;如何用命令行进行sql server 数据库和用户管理的方法&#xff0c;作为从Access2019 直接导出数据到sql server 数据库…

数据结构(六)----串

目录 1.串的定义 2.串的基本操作 3.串的存储结构 (1)串的定义 •顺序存储 •链式存储 (2)求串长 (3)求子串 (4)比较串的大小 (5)定位操作 4.字符串的模式匹配 (1)朴素模式匹配算法 (2)KMP算法 •求模式串中的next数组&#xff08;重点&#xff09; •练习&#…

【C++】二维数组传参方式

最近刚开始刷剑指offer&#xff0c;刚做到第三题的时候&#xff0c;发现C二维数组的传参方式和C语言略有些不同&#xff0c;所以在这篇博客中&#xff0c;会列出C/C常见的二维数组传参方式。&#xff08;本方式和代码都是基于vs环境所编写&#xff09; 一.C语言二维数组传参方式…

如何将Oracle 中的部分不兼容对象迁移到 OceanBase

本文总结分析了 Oracle 迁移至 OceanBase 时&#xff0c;在出现三种不兼容对象的情况时的处理策略以及迁移前的预检方式&#xff0c;通过提前发现并处理这些问题&#xff0c;可以有效规避迁移过程中的报错风险。 作者&#xff1a;余振兴&#xff0c;爱可生 DBA 团队成员&#x…

React【Day2】

React表单控制 受控绑定 概念&#xff1a;使用React组件的状态&#xff08;useState&#xff09;控制表单的状态 双向绑定 MVVM 报错记录&#xff1a; 错误代码&#xff1a; import { useState } from "react";const App () > {const [value, setValue] useS…

OpenCV从入门到精通实战(八)——基于dlib的人脸关键点定位

本文使用Python库dlib和OpenCV来实现面部特征点的检测和标注。 下面是代码的主要步骤和相关的代码片段&#xff1a; 步骤一&#xff1a;导入必要的库和设置参数 首先&#xff0c;代码导入了必要的Python库&#xff0c;并通过argparse设置了输入图像和面部标记预测器的参数。…

从OWASP API Security TOP 10谈API安全

1.前言 应用程序编程接口&#xff08;API&#xff09;是当今应用驱动世界创新的一个基本元素。从银行、零售、运输到物联网、 自动驾驶汽车、智慧城市&#xff0c;API 是现代移动、SaaS 和 web 应用程序的重要组成部分&#xff0c;可以在面向客 户、面向合作伙伴和内部的应用程…

从零实现诗词GPT大模型:数据集介绍和预处理

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 本章将介绍该系列文章中使用的数据集&#xff0c;并且编写预处理代码&#xff0c;处理成咱们需要的格式。 一、数据集介绍 咱们使用的数据集名称是chinese-poetry&#xff0c;是一个在github上开源的中文诗…

Android开发:Camera2+MediaRecorder录制视频后上传到阿里云VOD

文章目录 版权声明前言1.Camera1和Camera2的区别2.为什么选择Camera2&#xff1f; 一、应用Camera2MediaPlayer实现拍摄功能引入所需权限构建UI界面的XMLActivity中的代码部分 二、在上述界面录制结束后点击跳转新的界面进行视频播放构建播放界面部分的XMLActivity的代码上述代…

一个基于单片机内存管理-开源模块

概述 此模块是一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。 源码仓库:GitHub - chenqy2018/mem_malloc mem_malloc介绍 一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎…

Linux 添加启动服务--Service

1&#xff0c;服务配置service文件 Service 服务的实际作用是开启后自动启动服务&#xff0c;运行一些不须要登录的程序&#xff0c;任务。 实例1、上电自动连接WIFI热点 1.1 新建.service文件 /etc/systemd/system/wificonnect.service [Unit] DescriptionService [wifico…