使用fdupes来查找重复文件(以md5值为判断标准)

应用场景:

找出指定目录下重复的文件(文件名不一致,但是内容一致),并删除。

fdupes 是 Linux 下的一个工具,它由 Adrian Lopez 用 C 编程语言编写并基于 MIT 许可证发行,该应用程序可以在指定的目录及子目录中查找重复的文件。fdupes 通过对比文件的 MD5 签名,以及逐字节比较文件来识别重复内容,fdupes 有各种选项,可以实现对文件的列出、删除、替换为文件副本的硬链接等操作。

  • 文件对比以下列顺序开始
  • 大小对比 > 部分 MD5 签名对比 > 完整 MD5 签名对比 > 逐字节对比

1、安装

# Ubuntu
$ sudo apt install fdupes
$ sudo apt install fslint

# CentOS
# 需要事先安装EPEL源
$ sudo yum install fdupes
$ sudo yum install fslint

# 检查已安装的fdupes版本
$ fdupes --version
fdupes 1.6.1

# 运行图形化客户端
$ fslint-gui

2、命令参数

$ fdupes -h
Usage: fdupes [options] DIRECTORY...

 -r --recurse           对于给定的目录进行递归查找
 -R --recurse:          对于给定的目录进行递归查找
 -s --symlinks          设置软链接
 -H --hardlinks         设置硬链接;两个或多个文件指向同一个磁盘区域
 -n --noempty           排除长度为零的文件
 -A --nohidden          排除隐藏文件
 -f --omitfirst         忽略每组匹配中的第一个文件
 -1 --sameline          在一行中列出每一组匹配项
 -S --size              显示重复文件的大小
 -m --summarize         汇总所有文件信息
 -q --quiet             隐藏进度
 -d --delete            删除重复文件只保留一个副本;数据可能会丢失
 -N --noprompt          与——delete一起使用;删除重复文件只保留一个副本且不提示
 -I --immediate         删除遇到的重复项且不将它们分组
 -p --permissions       不要认为具有不同所有者/组或权限位的文件是重复的
 -o --order=BY          选择排序顺序的输出
 -i --reverse           逆序排序
 -v --version           显示fdupes版本
 -h --help              显示此帮助消息

3、使用技巧

写一些测试文件

for i in {1..15}; do
    echo  Hello World! > tecmint${i}.txt;
done

使用 -r 选项在每个目录包括其子目录中递归搜索重复文件。它会递归搜索所有文件和文件夹,花一点时间来扫描重复文件,时间的长短取决于文件和文件夹的数量。

-S 显示重复文件的大小

# fdupes -Sr  zjz/
13 bytes each:
zjz/tecmint1.txt
zjz/tecmint2.txt
zjz/tecmint3.txt
zjz/tecmint4.txt
zjz/tecmint5.txt
zjz/tecmint6.txt
zjz/tecmint7.txt
zjz/tecmint8.txt
zjz/tecmint9.txt
zjz/tecmint10.txt
zjz/tecmint11.txt
zjz/tecmint12.txt
zjz/tecmint13.txt
zjz/tecmint14.txt
zjz/tecmint15.txt

4 bytes each:
zjz/test12.txt/test12.txt
zjz/test12.txt/test11.txt
zjz/test12.txt/test15.txt

要删除重复文件,同时保留一个副本,你可以使用 -d 选项。使用该选项,必须额外小心,否则最终结果可能会是文件/数据的丢失。

郑重提醒,此操作不可恢复。你可能注意到了,所有重复的文件被列了出来,并给出删除提示,一个一个来或指定范围或一次性全部删除。你可以选择一个范围,就像下面这样,来删除指定范围内的文件。

# 每个重复文件都会提示
$ fdupes -d /home/$USER/Desktop/
[1] /home/tecmint/Desktop/tecmint13.txt
[2] /home/tecmint/Desktop/tecmint8.txt
......

Set 1 of 1, preserve files [1 - 15, all]: 2-15
   [-] /home/tecmint/Desktop/tecmint/tecmint13.txt
   [+] /home/tecmint/Desktop/tecmint/tecmint8.txt
   ......

# 无提示的删除其他文件
$ fdupes -d -N /home/$USER/Desktop/

从安全角度出发,你可能想要打印 fdupes 的输出结果到文件中,然后检查文本文件来决定要删除什么文件。这样做,可以降低意外删除文件的风险。你应该替换 /home 为你想要的文件夹。同时,如果你想要递归搜索并打印大小,可以使用 -r 和 -S 选项。

# 输出到文件中
$ fdupes -Sr /home > /home/fdupes.txt

在搜索指定目录的重复文件时候,我们可以在计算时分别使用 -n 和 -A 选项排除空白文件以及排除隐藏文件。

# 命令如下所示
$ fdupes -n -A /home

汇总重复文件信息,使用 -m 选项。

$ fdupes -r -m /usr
3492 duplicate files (in 1724 sets), occupying 74.8 megabytes

  

  

 

 

posted @ 2022-01-20 18:06  凡人半睁眼  阅读(718)  评论(0编辑  收藏  举报