使用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