如何在Linux中查找和删除重复文件

时间:2020-03-21 11:44:21  来源:igfitidea点击:

在编辑或者修改它们之前,我始终将配置文件或者任何旧文件备份到我的硬盘中的某个位置,所以我可以从备份中恢复它们,如果我不小心做错了。
但问题是我忘了清理那些文件,我的硬盘在一段时间后填充了大量重复的文件。
我觉得懒得清理旧文件或者害怕我可以删除一个重要的文件。
如果我们在不同的备份目录中使用与同一文件的多个副本压倒了,则可以使用下面的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