Linux 上怎么做文件去重?真实场景示例

发布时间 - 2025-12-05 00:00:00    点击率:
使用fdupes或find+md5sum识别并处理内容重复文件,先备份、过滤非目标文件,再通过删除或转硬链接实现安全去重,推荐fdupes交互操作与hardlink节省空间。

Linux 上做文件去重,核心是识别内容相同但路径/名称不同的文件,并安全地保留一份、删除或软链接其余。不看文件名、大小,只看内容是否一致——这才是真实去重。

fdupes 快速找并处理重复文件

fdupes 是最常用、可靠的去重工具,按文件内容(MD5 + 比对)识别重复项,支持交互式删除或自动处理。

  • 安装:Ubuntu/Debian 用 sudo apt install fdupes;CentOS/RHEL 用 sudo yum install fdupes(或 dnf)
  • 扫描当前目录及子目录所有普通文件:fdupes -r .
  • 显示重复组并交互式选择保留哪份(其余删除):fdupes -r -d . → 每组出现时输入要保留的编号(如 1),回车即删其余
  • 直接删除所有重复项(只留每组第一个):fdupes -r -f . | xargs -I {} rm -v "{}"-f 输出唯一文件,即每组仅首行;慎用,建议先试运行不带 rm 的版本)

find + md5sum 手动排查(适合脚本集成或无 root 环境)

当不能装 fdupes,或需嵌入自动化流程时,可用 find 配合校验和实现轻量去重逻辑。

  • 生成所有文件的 MD5 和路径:find /path/to/dir -type f -exec md5sum {} \; | sort
  • 提取重复 MD5 块:find /path/to/dir -type f -exec md5sum {} \; | sort | awk '{if ($1 == prev) print; prev=$1}'
  • 更实用的一行去重清理(保留每组第一个,其余加 .dup 后缀):
    find /data/docs -type f -exec md5sum {} \; | sort | awk 'NR==FNR{a[$1]=$2;next} $1 in a{print "mv \"" $2 "\" \"" $2 ".dup\""}' - - | sh -x
    (说明:先建哈希→路径映射,再对重复哈希输出重命名命令,最后执行;-x 可预览操作)

去重前必做的三件事

真实场景中,误删代价高,务必提前验证和防护:

  • 确认文件类型:避免对日志、数据库文件、正在写的临时文件去重(加 -not -name "*.log" -not -path "/proc/*" 过滤)
  • 备份关键目录:至少用 cp -al 做硬链接快照(节省空间且秒级恢复):cp -al docs docs-backup-$(date +%F)
  • 检查硬链接数:用 ls -li 看 inode 号,相同表示已是硬链接——这类无需去重,它们本就是同一份数据的不同入口

进阶技巧:用 hardlink 把重复内容转为硬链接(省空间不丢文件)

比起删文件,把重复内容统一指向同一个 inode 更安全、可逆,尤其适合备份目录、静态资源库。

  • 安装:sudo apt install hardlink(Debian/Ubuntu)
  • 在目标目录下将内容相同的文件转为硬链接:hardlink -t /path/to/dir
  • 效果:原文件名、权限、时间戳全保留,磁盘占用降为 1 份;注意:仅限同一文件系统内生效

基本上就这些。真实场景里,先用 fdupes -r -d 交互确认,再考虑 hardlink 自动优化,比写一堆 find 脚本更稳更快。关键是别跳过备份和过滤——去重不是目的,释放空间且不出错才是。


# linux  # centos  # node  # ubuntu  # 工具  # dnf  # print  # if  # sort  # date  #   # li  # 数据库  # debian  # 自动化  # 每组  # 第一个  # 进阶  # 才是  # 这类  # 已是  # 不看  # 更快  # 现时  # 只看 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 活动邀请函制作网站有哪些,活动邀请函文案?  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  网站页面设计需要考虑到这些问题  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  如何快速选择适合个人网站的云服务器配置?  Java垃圾回收器的方法和原理总结  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  音乐网站服务器如何优化API响应速度?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  JavaScript实现Fly Bird小游戏  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何快速搭建安全的FTP站点?  Laravel如何创建自定义Facades?(详细步骤)  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  如何在建站主机中优化服务器配置?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Python文件异常处理策略_健壮性说明【指导】  简单实现jsp分页  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  利用python获取某年中每个月的第一天和最后一天  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  油猴 教程,油猴搜脚本为什么会网页无法显示?  ,网页ppt怎么弄成自己的ppt?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel如何自定义分页视图?(Pagination示例)  如何在IIS7上新建站点并设置安全权限?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  详解Android——蓝牙技术 带你实现终端间数据传输  js实现获取鼠标当前的位置  Python函数文档自动校验_规范解析【教程】  如何在IIS中新建站点并解决端口绑定冲突?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel如何处理异常和错误?(Handler示例)  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  php485函数参数是什么意思_php485各参数详细说明【介绍】  Bootstrap CSS布局之列表  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  微信小程序 require机制详解及实例代码  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】