我这里有 6 款飙车技能,希望能带你起飞:
1. diff 文本比较命令
diff
命令用于比较两个文件的差异。diff
的比较是以逐行的方式进行扫描的,如果指定要比较目录,则 diff
会比较目录中相同文件名的文件,但不会比较其中子目录。diff
命令的执行结果将使用 和
>
显示两文件之间的差异,并在行首指出有差异的行号,利用这个特性我们可以找到相同的文件。
如果你比较的两个文件有差异,diff
将输出差异点:
$diffindex.htmlbackup.html
2438a2439,2441
>
>That'sallthereistoreport.
>
如果你执行 diff
后没有输出,那表示两个文件相同(不用再考虑了直接干掉一个文件吧)。
$diffhome.htmlindex.html
$
但是我要告诉你,diff
致命的缺点就是效率低,每次只能比较两个文件,且执行结果显示不明确。只能用于日常的脚本、代码的比较。
2. cksum 对比校验和
cksum
命令原本是用于检查文件的 CRC 是否正确,可以确保文件在到另一个系统中的完整性。cksum
命令会根据特定的算法根据文件内容计算出一串数字。如果两个文件的内容不同,它们的 cksum
值则不同,虽然不是绝对的,但 CCITT 官方表示,准确率至少可达 99.998% 。
$cksum*.html
2819078353228029backup.html
4073570409227985home.html
4073570409227985index.html
上面的 3 个文件,第 2 个和第 3 个的 cksum
值是相同的,我们可以认为这两个文件的内容是一致的。
3. find 查找命令
find
命令原本是用来在指定目录下查找文件,本身并没有查找重复文件的选项,但是它可以用于按照名称或类型对文件搜索然后结合 cksum
命令,对比文件的 CRC 值。
$find.-name"*.html"-execcksum{};
4073570409227985./home.html
2819078353228029./backup.html
4073570409227985./index.html
以上是根据名字查找以 html 结尾的文件,并计算出 cksum
值。
4. fslint 重复数据查找命令
fslint
命令能够找出系统中的重复文件、临时文件、错误的系统链接等内容,用户可以根据实际情况对这些内容予以删除,从而达到清理系统的目的。但是你要给它指定一个起始位置,否则该命令需要占用很长时间才能完成查找。
$fslint.
-----------------------------------filenamelint
-------------------------------Invalidutf8names
-----------------------------------filecaselint
----------------------------------DUPlicatefileshome.html
index.html
-----------------------------------Danglinglinks
--------------------redundantcharactersinlinks
------------------------------------suspectlinks
--------------------------------EmptyDirectories
./.gnupg
----------------------------------TemporaryFiles
----------------------duplicate/conflictingNames
------------------------------------------Badids
-------------------------NonStrippedexecutables
Tips:fslint
是需要另外安装的,如果你想在任何路径下都能执行还需将它添加到 PATH
路径中。
$exportPATH=$PATH:/usr/share/fslint/fslint
5. rdfind 冗余数据查找命令
rdfind
是一个通过访问目录和子目录来找出重复文件的自由开源的工具。被称为「冗余数据查找」,该命令可以根据文件日期确定哪些文件是原始文件,你可以决定是删除还是使用硬链接或者符号(软)链接代替它们。
$rdfind~
Nowscanning"/home/alvin",found12files.
Nowhave12filesintotal.
Removed1filesduetononuniquedeviceandinode.
Totalsizeis699498bytesor683KiB
Removed9filesduetouniquesizesfromlist.2filesleft.
Noweliminatingcandidatesbasedonfirstbytes:removed0filesfromlist.2filesleft.
Noweliminatingcandidatesbasedonlastbytes:removed0filesfromlist.2filesleft.
Noweliminatingcandidatesbasedonsha1checksum:removed0filesfromlist.2filesleft.
Itseemslikeyouhave2filesthatarenotunique
Totally,223KiBcanbereduced.
Nowmakingresultsfileresults.txt
你可在不修改其他事情情况下使用 -dryrun
选项找出所有重复文件,并在终端上输出汇总信息。
$rdfind-dryruntrue~
(DRYRUNMODE)Nowscanning"/home/alvin",found12files.
(DRYRUNMODE)Nowhave12filesintotal.
(DRYRUNMODE)Removed1filesduetononuniquedeviceandinode.
(DRYRUNMODE)Totalsizeis699352bytesor683KiB
Removed9filesduetouniquesizesfromlist.2filesleft.
(DRYRUNMODE)Noweliminatingcandidatesbasedonfirstbytes:removed0filesfromlist.2filesleft.
(DRYRUNMODE)Noweliminatingcandidatesbasedonlastbytes:removed0filesfromlist.2filesleft.
(DRYRUNMODE)Noweliminatingcandidatesbasedonsha1checksum:removed0filesfromlist.2filesleft.
(DRYRUNMODE)Itseemslikeyouhave2filesthatarenotunique
(DRYRUNMODE)Totally,223KiBcanbereduced.
(DRYRUNMODE)Nowmakingresultsfileresults.txt
目录中有一些空文件,如果你想忽略他们,你可以像下面一样使用 -ignoreempty
选项,下面详细解释它的常用选项。
选项 | 意义 |
---|---|
-ignoreempty | 忽略空文件 |
-minsize | 忽略小于特定大小的文件 |
-followsymlink | 遵循符号链接 |
-removeidentinode | 删除引用相同 inode 的文件 |
-checksum | 标识要使用的校验和类型 |
-deterministic | 决定如何排序文件 |
-makesymlinks | 将重复文件转换为符号链接 |
-makehardlinks | 用硬链接替换重复文件 |
-makeresultsfile | 在当前目录中创建结果文件 |
-outputname | 提供结果文件的名称 |
-deleteduplicates | 删除/取消链接重复文件 |
-sleep | 设置读取文件之间的休眠时间(毫秒) |
-n,-dryrun | 显示本应执行的操作,但不要执行 |
这里需要我们注意一下,rdfind
命令提供了使用 -deleteduplicates true
设置删除重复文件的选项。顾名思义,使用这个选项它将自动删重复的文件。
$rdfind-deleteduplicatestrue.
...
Deleted1files.
在 RHEL、CentOS 上:执行 sudo yum install rdfind
即可完成 rdfind
的安装。
6. 使用 fdupes 命令
fdupes
是在指定目录以及子目录中识别和移除重复文件的命令行工具。仅执行 fdupes
命令,它会把重复文件放在一起,如下所示:
$fdupes~
/home/alvin/UPGRADE
/home/alvin/mytwin
/home/alvin/lp.txt
/home/alvin/lp.man
/home/alvin/penguin.png
/home/alvin/penguin0.png
/home/alvin/hideme.png
-r
选项代表递归,表示在指定目录下以递归的方式来查找重复文件。这个选项慎用,因为 Linux 系统中包含许多重要的文件(比如用户的 .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.png
fdupes
常用选项如下:
选项 | 意义 |
---|---|
-r –recurse | 递归 |
-R –recurse | 递归指定的目录 |
-s –symlinks-H –hardlinks | 遵循符号链接目录 |
-H –hardlinks | 将硬链接视为重复链接 |
-n –noempty | 忽略空文件 |
-f –omitfirst | 省略每组匹配中的第一个文件 |
-A –nohidden | 忽略隐藏文件 |
-1 –sameline | 相同列表匹配单行 |
-S –size | 显示重复文件的大小 |
-m –summarize | 汇总重复文件信息 |
-q –quiet | 进度指示器 |
-d –delete | 提示用户保存文件 |
-N –noprompt | 与–delete一起使用时无效,保留集合中的第一个文件 |
-I –immediate | 在遇到它们时删除重复项 |
-p –permissions | 权限不会将具有不同所有者/组或权限位的SONCIDER文件作为重复项 |
-o –order=WORD | 根据规范的WORD订单文件 |
-i –reverse | 排序时反向逆序 |
-v –version | 显示fdupes版本 |
-h –help | 显示帮助 |
在 RHEL、CentOS 上:执行 sudo yum install fdupes
即可完成 fdupes
的安装。
小结
其实Linux系统为我们提供了许多定位和删除重复文件的工具,这些工具能帮助你快速找到并清理系统中的重复的文件,希望能对你有所帮助。
本文来源:www.lxlinux.net/6-ways-to-find-duplicated-files.html,若引用不当,请联系修改。
网友留言: