正德厚生,臻于至善

在 Linux 下对比两个目录,找出其中一个目录有而另一个目录没有的文件

方法 1:comm 命令(推荐)

comm 可以比较两个已排序的文件,并输出三列:

  • 第 1 列:只在第一个文件出现的行
  • 第 2 列:只在第二个文件出现的行
  • 第 3 列:两个文件共有的行

步骤:

bash

# 列出目录 A 的所有文件(相对路径)
find dirA -printf "%P\n" | sort > listA

# 列出目录 B 的所有文件(相对路径)
find dirB -printf "%P\n" | sort > listB

# 比较,找出 dirA 有而 dirB 没有的文件
comm -23 listA listB

# 找出 dirB 有而 dirA 没有的文件
comm -13 listA listB

说明:

  • -printf "%P\n" 输出相对路径,这样不同目录下的同名文件可以正确对比。
  • sort 是必须的,因为 comm 要求输入是已排序的。
  • comm -23 表示不显示第 2 列和第 3 列,只显示 dirA 独有的内容。
  • comm -13 表示不显示第 1 列和第 3 列,只显示 dirB 独有的内容。

方法 2:rsync 命令

bash

rsync -avn --delete dirA/ dirB/

说明:

  • -n 表示 dry run(模拟运行,不实际同步)
  • --delete 会显示 dirB 中多出的文件(会被删除的部分)
  • 输出中:
    • > 开头的是 dirA 有而 dirB 没有的文件
    • < 开头的是 dirB 有而 dirA 没有的文件
    • *deleting 表示仅在 dirB 存在的文件

方法 3:diff 命令

bash

diff -rq dirA dirB

说明:

  • -r 递归比较子目录
  • -q 只显示差异,不显示内容
  • 输出格式:plaintextOnly in dirA: xxx Only in dirB: yyy

总结推荐

  • 如果只是找差异文件名:comm + find 最精准且适合脚本处理
  • 如果想同时看到差异方向:rsync -avn --delete 直观
  • 如果只是快速看:diff -rq 最简单

赞(0) 打赏
未经允许不得转载:徐万新之路 » 在 Linux 下对比两个目录,找出其中一个目录有而另一个目录没有的文件

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册