查找和替换重复文件是大多数计算机用户的普遍要求。查找和删除重复文件是一项繁重的工作,需要时间和耐心。如果您的机器由 GNU/Linux 驱动,那么查找重复文件会非常容易,这要归功于 “
fdupes
” 实用程序。
Fdupes
是由Adrian Lopez
用C
编程语言编写的 Linux 实用程序,在 MIT 许可下发布。该应用程序能够在给定的一组目录和子目录中找到重复的文件。Fdupes 通过比较文件的 MD5 签名然后进行字节到字节的比较来识别重复项。Fdupes 可以传递许多选项来列出、删除和替换带有硬链接的文件到副本。比较按以下顺序开始:
大小比较
>部分 MD5 签名比较
>完整 MD5 签名比较
>字节到字节比较
。
在 Linux 上安装 fdupes
> yum install fdupes
rumenz
)下创建一些重复的文件,如下所示:$ mkdir /home/rumenz/ && cd /home/rumenz && for i in {1..15}; do echo "rumenz.com" > rumenz${i}.txt ; done
运行上述命令后,让我们验证是否使用[ls 命令]创建了重复文件。
> ls -l
total 60
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz10.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz11.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz12.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz13.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz14.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz15.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz1.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz2.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz3.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz4.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz5.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz6.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz7.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz8.txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz9.txt
上面的脚本创建了
15 个
文件,即 rumenz1.txt、rumenz2.txt…rumenz15.txt 并且每个文件都包含相同的数据,即,
"rumenz.com"
rumenz
中搜索重复文件。> fdupes /home/rumenz
/home/rumenz/rumenz13.txt
/home/rumenz/rumenz8.txt
/home/rumenz/rumenz11.txt
/home/rumenz/rumenz3.txt
/home/rumenz/rumenz4.txt
/home/rumenz/rumenz6.txt
/home/rumenz/rumenz7.txt
/home/rumenz/rumenz9.txt
/home/rumenz/rumenz10.txt
/home/rumenz/rumenz2.txt
/home/rumenz/rumenz5.txt
/home/rumenz/rumenz14.txt
/home/rumenz/rumenz1.txt
/home/rumenz/rumenz15.txt
/home/rumenz/rumenz12.txt
-r
选项在每个目录下递归搜索重复项,包括其子目录。它会递归搜索所有文件和文件夹,具体取决于文件和文件夹的数量,扫描重复项需要一些时间。与此同时,你会看到终端的总进度,就像这样。
> fdupes -r /home
Progress [37780/54747] 69%
-S
选项查看在文件夹中找到的重复项的大小。> fdupes -S /home/rumenz
65 bytes each:
/home/rumenz/rumenz13.txt
/home/rumenz/rumenz8.txt
/home/rumenz/rumenz11.txt
/home/rumenz/rumenz3.txt
/home/rumenz/rumenz4.txt
/home/rumenz/rumenz6.txt
/home/rumenz/rumenz7.txt
/home/rumenz/rumenz9.txt
/home/rumenz/rumenz10.txt
/home/rumenz/rumenz2.txt
/home/rumenz/rumenz5.txt
/home/rumenz/rumenz14.txt
/home/rumenz/rumenz1.txt
/home/rumenz/rumenz15.txt
/home/rumenz/rumenz12.txt
-S
和-r
选项查看遇到的每个目录和子目录的重复文件大小,如下所示:> fdupes -Sr /home/rumenz
65 bytes each:
/home/rumenz/rumenz13.txt
/home/rumenz/rumenz8.txt
/home/rumenz/rumenz11.txt
/home/rumenz/rumenz3.txt
/home/rumenz/rumenz4.txt
/home/rumenz/rumenz6.txt
/home/rumenz/rumenz7.txt
/home/rumenz/rumenz9.txt
/home/rumenz/rumenz10.txt
/home/rumenz/rumenz2.txt
/home/rumenz/rumenz5.txt
/home/rumenz/rumenz14.txt
/home/rumenz/rumenz1.txt
/home/rumenz/rumenz15.txt
/home/rumenz/rumenz12.txt
107 bytes each:
/home/rumenz/resume_files/r-csc.html
/home/rumenz/resume_files/fc.html
-S
和 / 或-r
。> fdupes /home/rumenz/ /home/deploy/
'-d'
。使用此选项时应格外小心,否则您最终可能会丢失必要的文件 / 数据,并注意该过程不可恢复。$ fdupes -d /home/rumenz
[1] /home/rumenz/rumenz13.txt
[2] /home/rumenz/rumenz8.txt
[3] /home/rumenz/rumenz11.txt
[4] /home/rumenz/rumenz3.txt
[5] /home/rumenz/rumenz4.txt
[6] /home/rumenz/rumenz6.txt
[7] /home/rumenz/rumenz7.txt
[8] /home/rumenz/rumenz9.txt
[9] /home/rumenz/rumenz10.txt
[10] /home/rumenz/rumenz2.txt
[11] /home/rumenz/rumenz5.txt
[12] /home/rumenz/rumenz14.txt
[13] /home/rumenz/rumenz1.txt
[14] /home/rumenz/rumenz15.txt
[15] /home/rumenz/rumenz12.txt
Set 1 of 1, preserve files [1 - 15, all]:
您可能会注意到,所有重复项都已列出,系统会提示您删除,要么一一删除,要么删除某个范围,要么一次性全部删除。您可以选择如下所示的范围来删除特定范围的文件文件。
Set 1 of 1, preserve files [1 - 15, all]: 2-15
[-] /home/rumenz/rumenz13.txt
[+] /home/rumenz/rumenz8.txt
[-] /home/rumenz/rumenz11.txt
[-] /home/rumenz/rumenz3.txt
[-] /home/rumenz/rumenz4.txt
[-] /home/rumenz/rumenz6.txt
[-] /home/rumenz/rumenz7.txt
[-] /home/rumenz/rumenz9.txt
[-] /home/rumenz/rumenz10.txt
[-] /home/rumenz/rumenz2.txt
[-] /home/rumenz/rumenz5.txt
[-] /home/rumenz/rumenz14.txt
[-] /home/rumenz/rumenz1.txt
[-] /home/rumenz/rumenz15.txt
[-] /home/rumenz/rumenz12.txt
'fdupes'
的输出打印到文件,然后检查文本文件以决定删除哪个文件。这减少了意外删除文件的机会。你可以这样做:> fdupes -Sr /home > /home/fdupes.txt
注意
:您可以将“/home”
替换为您想要的文件夹。如果要分别递归搜索和打印大小,也可以使用选项'-r'
和'-S'
。
'-f'
省略每组匹配中的第一个文件。> ls -l /home/rumenz
total 20
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz9 (3rd copy).txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz9 (4th copy).txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz9 (another copy).txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz9 (copy).txt
-rw-r--r-- 1 rumenz rumenz 65 Aug 8 11:22 rumenz9.txt
然后从每组匹配项中省略第一个文件。
> fdupes -f /home/rumenz
/home/rumenz/rumenz9 (copy).txt
/home/rumenz/rumenz9 (3rd copy).txt
/home/rumenz/rumenz9 (another copy).txt
/home/rumenz/rumenz9 (4th copy).txt
> fdupes --version
fdupes 1.51