如何在Linux中查找和删除重复文件
在编辑或者修改它们之前,我始终将配置文件或者任何旧文件备份到我的硬盘中的某个位置,所以我可以从备份中恢复它们,如果我不小心做错了。
但问题是我忘了清理那些文件,我的硬盘在一段时间后填充了大量重复的文件。
我觉得懒得清理旧文件或者害怕我可以删除一个重要的文件。
如果我们在不同的备份目录中使用与同一文件的多个副本压倒了,则可以使用下面的UNIX操作系统中提供的工具查找和删除重复文件。
注意:
删除重复文件时请小心。
如果我们不小心,它将导致我们偶然的数据丢失。
我建议我们在使用这些工具时要特别注意。
在Linux中查找和删除重复文件
出于本教程的目的,我将讨论三个公用事业,
- rdfind,
- FDUPES,
- fslint。
这三个实用程序是免费的,开源的,以及在大多数UNIX的操作系统上工作。
1. RDFind.
RDFind,代表冗余数据查找,是一个免费的和开源实用程序,可在目录和/或者子目录中查找重复文件。
它会根据其内容进行比较文件,而不是它们的文件名。
RDFind使用排名算法对原始和重复文件进行分类。
如果我们有两个或者多个等于文件,则RDFind足够智能以查找原始文件,并将其余文件视为重复项。
一旦找到重复的,它会向我们报告。
我们可以决定删除它们或者用硬链接或者符号(软)链接替换它们。
安装RDFind.
rdfind在aur提供。
因此,我们可以使用像Yay这样的AUR助手程序在基于ARC的系统中安装它,如下所示。
$yay -S rdfind
在Debian,Ubuntu,Linux Mint:
$sudo apt-get install rdfind
关于Fedora:
$sudo dnf install rdfind
在Rhel,Centos:
$sudo yum install epel-release
$sudo yum install rdfind
用法
一旦安装,只需运行rdfind命令以及目录路径即可扫描重复文件。
$rdfind ~/Downloads
如上所述,在上面的屏幕截图中,RDFIND命令将扫描~/下载目录并将结果保存在当前工作目录中的名为CELEURS.TXT的文件中。
我们可以在结果中查看可能的重复文件的名称。
$cat results.txt # Automatically generated # duptype id depth size device inode priority name DUPTYPE_FIRST_OCCURRENCE 1469 8 9 2050 15864884 1 /home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/PluggableTransports/fte/tests/dfas/test5.regex DUPTYPE_WITHIN_SAME_TREE -1469 8 9 2050 15864886 1 /home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/PluggableTransports/fte/tests/dfas/test6.regex [...] DUPTYPE_FIRST_OCCURRENCE 13 0 403635 2050 15740257 1 /home/sk/Downloads/Hyperledger(1).pdf DUPTYPE_WITHIN_SAME_TREE -13 0 403635 2050 15741071 1 /home/sk/Downloads/Hyperledger.pdf # end of file
通过查看结果.TXT文件,我们可以轻松找到重复项。
如果我们愿意,我们可以手动删除重复项。
此外,我们可以在不更改任何内容的情况下查找给定目录中的所有重复项,并在终端中输出摘要:
$rdfind -dryrun true ~/Downloads
找到重复后,我们可以使用硬链接或者符号链接替换它们。
要使用硬链接替换所有重复项,请运行:
$rdfind -makehardlinks true ~/Downloads
要使用Symlinks/Soft Link替换所有重复项,运行:
$rdfind -makesymlinks true ~/Downloads
我们可以在目录中有一些空文件,并希望忽略它们。
如果是这样,请使用以下使用-ignereempty选项。
$rdfind -ignoreempty true ~/Downloads
如果我们不再想要旧文件,只需删除重复文件,而不是用硬链接替换它们。
要删除所有重复项,只需运行:
$rdfind -deleteduplicates true ~/Downloads
如果我们不想忽略空文件并与所有重复一起删除它们,请运行:
$rdfind -deleteduplicates true -ignoreempty false ~/Downloads
有关更多详细信息,请参阅帮助部分:
$rdfind --help
而且,手册页:
$man rdfind
2. FDUPES.
FDUPES是另一个命令行实用程序,可在指定目录和子目录中识别和删除重复文件。
它是免费的,用C编程语言编写的开源实用程序。
FDUPES通过比较文件大小,部分MD5签名,完整MD5签名,最后执行Byte-Byte-Byte比较进行验证来识别重复项。
与RDFind实用程序类似,FDUPES具有相当少的选项来执行操作,例如:
- 在目录和子目录中递归搜索重复文件
- 从考虑中排除空文件和隐藏文件
- 显示重复的大小
- 立即删除遇到的重复项
- 将具有不同所有者/组或者权限位的文件排除为重复项
- 还有很多。
安装FDUPES.
FDUPES可在大多数Linux发行版的默认存储库中提供。
在Arch Linux及其像Antergos,Manjaro Linux等变体上,使用以下步骤安装Pacman。
$sudo pacman -S fdupes
在Debian,Ubuntu,Linux Mint:
$sudo apt-get install fdupes
关于Fedora:
$sudo dnf install fdupes
在Rhel,Centos:
$sudo yum install epel-release
$sudo yum install fdupes
用法
fdupes用法很简单。
只需运行以下命令,可以在目录中查找重复文件,例如~/下载。
$fdupes ~/Downloads
来自我的系统的示例输出:
/home/sk/Downloads/Hyperledger.pdf /home/sk/Downloads/Hyperledger(1).pdf
如我们所见,我在/home/sk/downloads /目录中有一个重复的文件。
它仅显示父目录中的重复项。
如何查看子目录中的重复项?
只需使用下面的-r选项。
$fdupes -r ~/Downloads
现在,我们也将看到来自/home/sk/downloads/directory及其子目录的重复项。
FDUPES还可以一次找到从多个目录的重复项。
$fdupes ~/Downloads ~/Documents/theitroad
我们甚至可以搜索多个目录,一个递归地如下:
$fdupes ~/Downloads -r ~/Documents/theitroad
上面的命令在"~/下载"目录和"~/文档/onitad"目录及其子目录中搜索重复项。
有时,我们可能希望在目录中知道重复的大小。
如果是这样,请使用下面的选择。
$fdupes -S ~/Downloads 403635 bytes each: /home/sk/Downloads/Hyperledger.pdf /home/sk/Downloads/Hyperledger(1).pdf
同样,要在父目录中查看重复的大小,请使用-sr选项。
我们可以分别从考虑-n和-a中排除空和隐藏文件。
$fdupes -n ~/Downloads
$fdupes -A ~/Downloads
第一个命令将从考虑中排除零长度文件,后者将从考虑中排除隐藏文件,同时搜索指定目录中的重复项。
要总结重复文件信息,请使用-m选项。
$fdupes -m ~/Downloads 1 duplicate files (in 1 sets), occupying 403.6 kilobytes
要删除所有重复项,请使用-d选项。
$fdupes -d ~/Downloads
示例输出:
[1] /home/sk/Downloads/Hyperledger Fabric Installation.pdf [2] /home/sk/Downloads/Hyperledger Fabric Installation(1).pdf Set 1 of 1, preserve files [1 - 2, all]:
此命令将提示我们要保留和删除所有其他重复文件的文件。
只需输入任何数字以保留相应的文件并删除剩余文件。
使用此选项时会更加关注。
如果我们不小心,我们可能会删除原始文件。
如果要在每组重复项中保留第一个文件并删除其他文件,而不每次提示其他文件,请使用-dn选项(不推荐)。
$fdupes -dN ~/Downloads
删除遇到重复项,请使用-i标志。
$fdupes -I ~/Downloads
有关FDUPES的更多详细信息,请查看帮助部分和人员页面。
$fdupes --help
$man fdupes
3. FSLint.
FSLINT是另一个重复的文件查找器实用程序,我不时使用来摆脱不必要的重复文件并释放Linux系统中的磁盘空间。
与其他两个实用程序不同,FSLint都有GUI和CLI模式。
因此,它是新手的更友好的工具。
FSLint不只是找到重复项,也不是错误的符号链接,坏名称,临时文件,坏ID,空目录和非剥离的二进制文件等。
安装fslint.
FSLINT在AUR中提供,因此我们可以使用任何AUR助手安装它。
$yay -S fslint
在Debian,Ubuntu,Linux Mint:
$sudo apt-get install fslint
关于Fedora:
$sudo dnf install fslint
在Rhel,Centos:
$sudo yum install epel-release
$sudo yum install fslint
安装后,从菜单或者应用程序启动器启动它。
这就是FSLINT GUI的样子。
正如我们所看到的,FSLINT的界面是用户友好的和不言自明的。
在"搜索路径"选项卡中,添加要扫描的目录的路径,然后单击左下角的"查找"按钮以查找重复项。
检查重复选项以递归地搜索目录和子目录中的重复项。
FSLINT将快速扫描给定目录并列出它们。
从列表中,选择要清除的重复项,并选择它们中的任何一个,如保存,删除,合并和符号链接等操作。
在"高级搜索参数"选项卡中,我们可以在搜索重复项时指定要排除的路径。
fslint命令行选项
fslint提供了以下CLI实用程序的集合,以查找文件系统中的重复项:
- findup - 查找重复文件
- findnl - 查找名称lint(文件名问题)
- findu8 - 使用无效的UTF8编码查找文件名
- findbl - 找到不良链接(符号链接的各种问题)
- findsn - 查找同名(碰撞名称的问题)
- finded - 找到空目录
- findid - 查找带有死亡用户ID的文件
- findns - 查找非剥离的可执行文件
- findrs - 在文件中查找冗余空格
- findtf - 找到临时文件
- Findul - 找到可能未使用的库
- Zipdir - ext2目录条目中的回收浪费空间
所有这些实用程序都可用/usr/share/fslint/fslint/fslint位置。
例如,要在给定目录中查找重复项,请执行以下操作:
$/usr/share/fslint/fslint/findup ~/Downloads/
同样,要找到空目录,命令将是:
$/usr/share/fslint/fslint/finded ~/Downloads/
要在每个实用程序上获取更多详细信息,例如查找,运行:
$/usr/share/fslint/fslint/findup --help
有关FSLINT的更多详细信息,请参阅"帮助部分"和"手册"页面。
$/usr/share/fslint/fslint/fslint --help
$man fslint