当前位置: 首页 > 科技观察

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

时间:2023-03-18 19:07:47 科技观察

在编辑或修改配置文件或旧文件之前,我通常会把它们备份在硬盘的某个地方,这样如果我不小心误改了这些文件,我可以从恢复它们下载它们从备份。但问题是,如果我忘记清理备份文件,过一会儿,我的磁盘就会被这些大量的重复文件填满——我想我要么懒得清理这些旧文件,要么我担心我可能会删除重要文件。如果你和我一样,在类Unix操作系统中,很多同一个文件的多个版本被放置在不同的备份目录中,你可以使用以下工具来查找和删除重复的文件。提醒一句:删除重复文件时要小心。如果不小心,可能会导致数据意外丢失。我建议您在使用这些工具时要特别注意。在Linux中查找和删除重复文件出于本指南的目的,我将讨论以下三个工具:RdfindFdupesFSlint这三个工具是免费和开源的,可以在大多数类Unix系统上运行。1.RdfindRdfind的意思是冗余数据查找(redundantdatafind),是一款免费开源的通过访问目录和子目录查找重复文件的工具。它根据文件内容而不是文件名进行比较。Rdfind使用排序算法来区分原始文件和重复文件。如果您有两个或更多相同的文件,Rdfind将足够聪明地找到原始文件并将其余文件识别为重复文件。一旦找到重复文件,它就会向您报告。您可以决定是删除它们还是用硬链接或符号(软)链接替换它们。安装RdfindRdfind存在于AUR中。因此,在基于Arch的系统上,您可以使用任何AUR程序助手(例如Yay)来安装它,如下所示。$yay-Srdfind在Debian、Ubuntu、LinuxMint上:$sudoapt-getinstallrdfind在Fedora上:$sudodnfinstallrdfind在RHEL、CentOS上:$sudoyuminstallepel-release$sudoyuminstallrdfind安装后使用一次完成后,只需运行带目录路径的Rdfind命令即可扫描重复文件。$rdfind~/Downloads如您在上面的屏幕截图中所见,Rdfind命令将扫描~/Downloads目录并将结果存储在当前工作目录中名为results.txt的文件中。您可以在results.txt文件中看到可能重复的文件的名称。$catresults.txt#Automaticallygenerated#duptypeiddepthsizedeviceinodeprioritynameDUPTYPE_FIRST_OCCURRENCE1469892050158648841/home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/Pluggable/Transports/dftest/ftest测试5.regexDUPTYPE_WITHIN_SAME_TREE-1469892050158648861/home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/PluggableTransports/fte/tests/dfas/test6.regex[...]DUPTYPE_FIRST_OCCURRENCE4021571033/home/sk/Downloads/Hyperledger(1).pdfDUPTYPE_WITHIN_SAME_TREE-1304036352050157410711/home/sk/Downloads/Hyperledger.pdf#endoffile通过检查results.txt文件,您可以轻松找到那些重复文件。如果您愿意,可以手动删除它们。此外,您可以使用-dryrun选项查找所有重复文件而不更改任何其他内容,并在终端上输出摘要。$rdfind-dryruntrue~/Downloads一旦发现重复文件,您可以用硬链接或符号链接替换它们。用硬链接替换所有重复文件,运行:$rdfind-makehardlinkstrue~/Downloads用符号链接/软链接替换所有重复文件,运行:$rdfind-makesymlinkstrue~/Downloads目录中有一些空文件,也许你想要要忽略它们,您可以像这样使用-ignoreempty选项:$rdfind-ignoreemptytrue~/Downloads如果您不再需要这些旧文件,请删除重复文件,而不是用硬链接或软链接替换它们。要删除重复文件,只需运行:$rdfind-deleteduplicatestrue~/Downloads如果您不想忽略空文件并将它们与所有重复文件一起删除。运行:$rdfind-deleteduplicatestrue-ignoreemptyfalse~/Downloads有关详细信息,请参阅帮助部分:$rdfind--help手册页:$manrdfind2。命令行工具。这是一个用C语言编写的免费开源工具。Fdupes通过比较文件大小、部分MD5签名和完整MD5签名来识别重复文件,最后逐字节进行比较检查。与Rdfind工具类似,Fdupes带有很少的选项来执行操作,例如:在目录和子目录中递归搜索重复文件从计算中排除空文件和隐藏文件用户/组或权限位以排除重复文件更多安装FdupesFdupes存在于大多数Linux发行版的默认存储库。在ArchLinux及其变体(如Antergos、ManjaroLinux)上,使用Pacman安装它,如下所示。$sudopacman-Sfdupes在Debian、Ubuntu、LinuxMint上:$sudoapt-getinstallfdupes在Fedora上:$sudodnfinstallfdupes在RHEL、CentOS上:$sudoyuminstallepel-release$sudoyuminstallfdupes用法Fdupes用法是很简单。只需运行以下命令即可在以下目录中查找重复文件:~/Downloads。$fdupes~/Downloads我系统的示例输出:/home/sk/Downloads/Hyperledger.pdf/home/sk/Downloads/Hyperledger(1).pdf如您所见,在/home/sk/Downloads/目录中那里是下的重复文件。它只显示父目录中的重复文件。如何显示子目录中的重复文件?像下面一样,使用-r选项。$fdupes-r~/Downloads您现在将在/home/sk/Downloads/目录和子目录中看到重复的文件。Fdupes还可用于从多个目录中快速查找重复文件。$fdupes~/Downloads~/Documents/ostechnix甚至可以搜索多个目录,递归搜索其中一个,如下:$fdupes~/Downloads-r~/Documents/ostechnix以上命令会搜索~/Downloads目录,~/Documents/ostechnix目录及其子目录中的重复文件。有时,您可能想知道目录中重复文件的大小。您可以使用-S选项,如下所示:$fdupes-S~/Downloads403635byteseach:/home/sk/Downloads/Hyperledger.pdf/home/sk/Downloads/Hyperledger(1).pdf同样,为了显示父目录和子目录中重复文件的大小,使用-Sr选项。我们可以分别使用-n和-A选项在计算时排除空白文件和排除隐藏文件。$fdupes-n~/Downloads$fdupes-A~/Downloads在指定目录中搜??索重复文件时,第一个命令将排除零长度文件,后续命令将排除隐藏文件。要汇总重复文件信息,请使用-m选项。$fdupes-m~/Downloads1个重复文件(1套),占用403.6KB删除所有重复文件,使用-d选项。$fdupes-d~/Downloads示例输出:[1]/home/sk/Downloads/HyperledgerFabricInstallation.pdf[2]/home/sk/Downloads/HyperledgerFabricInstallation(1).pdfSet1of1,preservefiles[1-2,all]:此命令将提示您保留或删除所有其他重复文件。输入任意数字保留相应的文件并删除其余的。使用此选项时应小心。如果您不小心,您可能会删除原始文件。如果要一次保留每组重复文件的第一个文件,并静默删除其他文件,请使用-dN选项(不推荐)。$fdupes-dN~/Downloads遇到重复文件时删除,使用-I标志。$fdupes-I~/Downloads有关Fdupes的更多详细信息,请参阅帮助部分和手册页。$fdupes--help$manfdupes3.FSlintFSlint是另一个查找重复文件的工具,我有时用它来删除我的Linux系统中不需要的重复文件并释放磁盘空间。与其他两个工具不同,FSlint具有GUI和CLI两种模式。所以对新手比较友好。FSlint不仅可以找到重复的文件,它还可以找到错误的符号链接、错误命名的文件、临时文件、错误的用户ID、空目录、未缩小的二进制文件等等。安装FSlintFSlint存在于AUR上,因此您可以使用任何AUR帮助程序安装它。$yay-Sfslint在Debian、Ubuntu、LinuxMint上:$sudoapt-getinstallfslint在Fedora上:$sudodnfinstallfslint在RHEL、CentOS上:$sudoyuminstallepel-release$sudoyuminstallfslint安装完成后,启动它来自菜单或应用程序启动器。FSlintGUI显示如下:可以看到,FSlint界面友好,一目了然。在“搜索路径”栏中,添加要扫描的目录路径,点击左下角的“查找”按钮,即可查找重复文件。verifyrecursive选项在目录和子目录中递归地搜索重复文件。FSlint将快速扫描给定目录并列出重复文件。从列表中选择您要清理的重复文件,您也可以选择“保存”、“删除”、“合并”和“符号链接”对其进行操作。在“高级搜索参数”列中,您可以指定搜索重复文件时要排除的路径。FSlint命令行选项FSlint提供了以下一组CLI工具来查找文件系统中的重复文件。findup—查找重复文件findnl—查找名称规范(有问题的文件名)findu8—查找非法的utf8编码文件名findbl—查找坏链接(有问题的符号链接)findsn—查找具有相同名称的文件(可能有冲突的文件)name)found—查找空目录findid—查找无效的用户文件findns—查找非精简可执行文件findrs—查找文件名中的额外空白findtf—查找临时文件findul—查找可能未使用的库zipdir—回收ext2目录密钥下浪费的空间所有这些工具都位于/usr/共享/fslint/fslint/fslint。例如,要在给定目录中查找重复文件,请运行:$/usr/share/fslint/fslint/findup~/Downloads/同样,查找空目录的命令是:$/usr/share/fslint/fslint/founded~/Downloads/有关每个工具的更多详细信息,例如:findup,运行:$/usr/share/fslint/fslint/findup--help有关FSlint的更多详细信息,请参阅帮助部分和手册页。$/usr/share/fslint/fslint/fslint--help$manfslint总结现在您知道在Linux中,使用三种工具来查找和删除不需要的重复文件。在这三个工具中,我经常使用Rdfind。这并不意味着其他两个工具效率较低,因为到目前为止我更喜欢Rdfind。好吧,轮到你了。你最喜欢哪个工具?为什么?通过在下面的评论部分留言让我们知道。就停在这里。希望这篇文章对你有所帮助。更多好东西即将到来,敬请期待。谢谢!