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

如何在Linux上识别内容相同的文件

时间:2023-03-14 22:37:20 科技观察

有时,文件副本会造成硬盘空间的巨大浪费,并在您要更新文件时造成混乱。以下是用于识别这些文件的六个命令。在最近的一篇文章中,我们研究了如何识别和定位硬链接文件(即指向相同磁盘内容并共享inode的文件)。在本文中,我们将了解可以查找具有相同内容但未链接的文件的命令。硬链接很有用,因为它们使文件可以存储在文件系统内的多个位置,而不会占用额外的硬盘空间。另一方面,有时文件副本会造成硬盘空间的巨大浪费,并且在您要更新文件时也会造成问题。在本文中,我们将了解识别这些文件的各种方法。使用diff命令比较文件比较两个文件的最简单方法可能是使用diff命令。输出将显示文件中的差异。<和>符号表示在作为参数传递的第一个(<)或第二个(>)文件中是否有额外的文本行。在此示例中,backup.html中有额外的文本行。$diffindex.htmlbackup.html2438a2439,2441>

>要报告的就这些。>
如果diff没有输出,则表示两个文件相同。$diffhome.htmlindex.html$diff最大的缺点是它一次只能比较两个文件,而且你必须指定比较哪些文件。这篇文章中的一些命令可以为您找到多个重复文件。使用checksumcksum(校验和)命令计算一个文件的校验和。校验和是将文本内容转换为长数字(例如2819078353228029)的数学简化。虽然校验和不是完全唯一的,但具有不同校验和的文件内容相同的可能性非常小。$cksum*.html2819078353228029backup.html4073570409227985home.html4073570409227985index.html在上面的示例中,您可以看到如何将产生相同校验和的第二个和第三个文件默认为相同。使用find命令虽然find命令没有查找重复文件的选项,但它仍然可以用于按名称或类型查找文件并运行cksum命令。示例:$查找。-name"*.html"-execcksum{}\;4073570409227985./home.html2819078353228029./backup.html4073570409227985./index.html使用fslint命令fslint命令可以专门用于查找重复文件。请注意,我们给了它一个起始位置。如果需要遍历相当多的文件,这可能需要一段时间才能完成。请注意它如何列出重复文件并查找其他问题,例如空目录和错误ID。$fslint.------------------------------------文件名lint------------------------------无效的utf8名称----------------------------------文件大小写lint--------------------------------重复文件<==home.htmlindex.html--------------------------------悬挂链接-------------------链接中的冗余字符------------------------------------可疑链接------------------------------空目录./.gnupg----------------------------------临时文件----------------------重复/冲突的名称-------------------------------------------错误的ID--------------------------非剥离可执行文件您可能需要在系统上安装fslint。您可能还需要将其添加到您的命令搜索路径中:$exportPATH=$PATH:/usr/share/fslint/fslint使用rdfind命令rdfind命令还会查找重复(相同内容)文件。它的名字意思是“重复数据搜索”,它可以根据文件日期确定哪个文件是原始文件——这在您选择删除重复文件时很有用,因为它会删除较新的文件。$rdfind~现在扫描“/home/shark”,发现12个文件。现在总共有12个文件。由于设备和inode不唯一,删除了1个文件。由于列表中的独特大小,总大小为699498字节或683KiBR删除了9个文件。剩下2个文件。现在根据第一个字节消除候选者:从列表中删除0个文件。剩下2个文件。现在根据最后一个字节消除候选者:从列表中删除0个文件。剩下2个文件。现在根据sha1校验和消除候选者:删除0list.2文件中的文件剩下。看起来你有2个文件不是唯一的,总共可以减少223KiB。现在制作结果文件results.txt你可以在dryrun模式下运行这个命令(换句话说,只报告可能的额外将进行更改)。$rdfind-dryruntrue~(DRYRUNMODE)Nowscanning"/home/shark",found12files.(DRYRUNMODE)Nowhavetotally12files.(DRYRUNMODE)Removed1filesduetononuniquedeviceandinode.(DRYRUN删除了1个文件MODE)Totalsizeis699352bytesor683KiBRRemoved9filesduetouniquesizesfromlist.2filesleft.(DRYRUNMODE)Noweliminingcandidatesbasedonfirstbytes:removed0filesfromlist.2filesleft.(DRYRUNMODE)现在根据最后一个字节消除候选人:从剩下的list.2个文件中删除0个文件。(DRYRUN模式)现在根据sha1校验和消除候选人:从剩下的list.2个文件中删除0个文件。(DRYRUN模式)看起来你有2个文件那些不是唯一的(DRYRUNMODE)总共可以减少223KiB。(DRYRUNMODE)现在正在制作结果文件results.txtrdfind命令相同提供了类似忽略空文件(-ignoreempty)和跟随符号链接(-followsymlinks)的功能。查看男人页面获得解释。-ignoreempty忽略空文件-minsize忽略小于指定大小的文件-followsymlinks跟随符号链接-removeidentinode删除引用相同inode的文件-checksum识别要使用的校验和类型-deterministic确定如何对文件进行排序-makesymlinks将重复文件转换为符号链接-makehardlinks用硬链接替换重复文件-makerresultsfile在当前目录中创建结果文件-outputname为结果文件提供名称-deleteduplicates删除/取消链接重复文件-sleep设置读取文件之间的休眠时间(毫秒)-n,-dryrunwld显示有已完成,但不要这样做请注意,rdfind命令提供了设置选项-deleteduplicatestrue来删除重复项。希望这一点命令语法不会惹恼您。;-)$rdfind-deleteduplicatestrue....删除了1个文件。<==您可能需要在您的系统上安装rdfind命令。尝试使用它以熟悉如何使用它可能是个好主意。使用fdupes命令fdupes命令还使识别重复文件变得容易。它还提供了许多有用的选项——例如用于迭代的-r。在此示例中,它将重复的文件组合在一起,如下所示:$fdupes~/home/shs/UPGRADE/home/shs/mytwin/home/shs/lp.txt/home/shs/lp.man/home/shs/penguin。png/home/shs/penguin0.png/home/shs/hideme.png这是一个使用迭代的例子,注意很多重复的文件很重要(用户的.bashrc和.profile文件),不应该被删除。#fdupes-r/home/home/shark/home.html/home/shark/index.html/home/dory/.bashrc/home/eel/.bashrc/home/nemo/.profile/home/dory/.profile/home/shark/.profile/home/nemo/tryme/home/shs/tryme/home/shs/arrow.png/home/shs/PNGs/arrow.png/home/shs/11/files_11.zip/home/shs/ERIC/file_11.zip/home/shs/penguin0.jpg/home/shs/PNGs/penguin.jpg/home/shs/PNGs/penguin0.jpg/home/shs/Sandra_rotated.png/home/shs/PNGs/下面列出了Sandra_rotated.pngfdupe命令的许多选项。使用fdupes-h命令或阅读手册页了解详细信息。-r--recurserecurse-R--recurse:通过指定目录递归-s--symlinks遵循符号链接目录-H--hardlinks将硬链接视为重复项-n--noempty忽略空文件-f--omitfirst省略第一个每组匹配中的文件-A--nohidden忽略隐藏文件-1--sameline在单行中列出匹配项-S--size显示重复文件的大小-m--summarize汇总重复文件信息-q--quiethideprogressindicator-d--deletepromptuserforfilestopreserve-N--nopromptwhenusewith--delete,preservethefirstfileinset-I--immediatedeleteduplicatesastheyencountered-p--permissions不具有不同所有者/组或权限位的soncider文件作为重复项-o--order=WORD根据规范排序文件-i--reverse排序时反向排序-v--versiondisplayfdupesversion-h--helpdisplayshelpfdupes命令是另一个你可能需要一些时间才能安装和使用以熟悉它的众多选项it如何处理重复文件的选项。