服务器使用过程中,查找和删除重复文件属于常见操作,但是大量的查找和删除文件是一个比较麻烦的工作,需要花费一定时间。如果所使用机器为GNU/Linux,查找重复文件就会更简单因为可以直接使用fdupes来完成。
Fdupes是一款Linux程序,由C语言编写根据MIT许可证发布,可以在给定目录和子目录中查找重复文件。Fdupes通过对比文件的MD5签名在进行字节和对字节的比较来识别重复文件。Fdupes工具可传递出许多选项来列出、删除、替换具有重复文件的硬链接文件。对比顺序为:大小比较>部分 MD5 签名比较>完整 MD5 签名比较>字节到字节比较。
安装fdupes(基于Debian系统如Ubuntu和Linux Mint):
$ sudo apt-get install fdupes
在基于CentOS / RHEL和Fedora的系统上,需打开epel存储库:
# yum install fdupes
# dnf install fdupes [在Fedora 22及以上版本]
Fedora 22开始,默认包管理器yum被dnf替代。安装完成后就可以开始使用fdupes。假设我们现在目录有重复文件,如tecmint:
$ mkdir /home/"$USER"/Desktop/tecmint && cd /home/"$USER"/Desktop/tecmint && for i in {1..15}; do echo "我爱Linux。" > tecmint${i}.txt ; done
先查看全部文件:
$ ls -l
可以输出结果有15个文件,tecmint1.txt、tecmint2.txt…tecmint15.txt,每个文件内容都含:“我爱Linux。”
在tecmint文件夹内搜索重复文件:
$ fdupes /home/$USER/Desktop/tecmint
使用r选项可以在每个目录含子目录下递归搜索重复项。可以递归搜索全部文件和文件夹,根据文件和文件夹数量,扫描重复项需要一些时间过程中可以看到总进度:
$ fdupes -r /home
Progress [37780/54747] 69%
S选线可以用来查看文件夹中重复项的大小:
$ fdupes -S /home/$USER/Desktop/tecmint
可以使用S和r一起查看每个目录及子目录中重复文件大小:
$ fdupes -Sr /home/avi/Desktop/
还可以根据需要选择在两个文件夹或三个文件夹中进行选择,完成文件夹递归搜索。
$ fdupes /home/avi/Desktop/ /home/avi/Templates/
删除重复文件保留副本可以使用d选项:
$ fdupes -d /home/$USER/Desktop/tecmint
可以选择如下所示的范围来删除特定范围的文件:
Set 1 of 1, preserve files [1 - 15, all]: 2-15
用选项“-f”省略每组匹配中的第一个文件,先列出目录文件:
$ ls -l /home/$USER/Desktop/howtoing
然后省略每组匹配中的第一个文件:
$ fdupes -f /home/$USER/Desktop/tecmint
再检查fdupes 的安装版本:
$ fdupes --version
查看fdupes的更多内容:
$ fdupes -h