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


相关推荐: 如何制作一个表白网站视频,关于勇敢表白的小标题?  深圳网站制作培训,深圳哪些招聘网站比较好?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  大连 网站制作,大连天途有线官网?  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  如何在建站之星网店版论坛获取技术支持?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  Android滚轮选择时间控件使用详解  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Laravel Docker环境搭建教程_Laravel Sail使用指南  JS中对数组元素进行增删改移的方法总结  长沙企业网站制作哪家好,长沙水业集团官方网站?  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  原生JS实现图片轮播切换效果  jQuery 常见小例汇总  JavaScript如何实现错误处理_try...catch如何捕获异常?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Firefox Developer Edition开发者版本入口  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  实例解析Array和String方法  如何确认建站备案号应放置的具体位置?  重庆市网站制作公司,重庆招聘网站哪个好?  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Swift中循环语句中的转移语句 break 和 continue  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel如何发送系统通知?(Notification渠道示例)  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  iOS发送验证码倒计时应用  Laravel如何为API生成Swagger或OpenAPI文档  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  焦点电影公司作品,电影焦点结局是什么?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何在腾讯云免费申请建站?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Java遍历集合的三种方式  如何登录建站主机?访问步骤全解析  微信小程序 配置文件详细介绍  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?