
文章插图
有时文件副本相当于对硬盘空间的巨大浪费,并会在你想要更新文件时造成困扰 。以下是用来识别这些文件的六个命令 。在最近的帖子中,我们看了 如何识别并定位硬链接的文件 (即,指向同一硬盘内容并共享 inode) 。在本文中,我们将查看能找到具有相同内容,却不相链接的文件的命令 。
-- Sandra Henry-stocker(作者)
硬链接很有用是因为它们能够使文件存放在文件系统内的多个地方却不会占用额外的硬盘空间 。另一方面,有时文件副本相当于对硬盘空间的巨大浪费,在你想要更新文件时也会有造成困扰之虞 。在本文中,我们将看一下多种识别这些文件的方式 。
用 diff 命令比较文件可能比较两个文件最简单的方法是使用 diff 命令 。输出会显示你文件的不同之处 。< 和 > 符号代表在当参数传过来的第一个(<)或第二个(>)文件中是否有额外的文字行 。在这个例子中,在 backup.html 中有额外的文字行 。
$ diff index.html backup.html2438a2439,2441> <pre>> That's all there is to report.> </pre>如果 diff 没有输出那代表两个文件相同 。
$ diff home.html index.html$diff 的唯一缺点是它一次只能比较两个文件并且你必须指定用来比较的文件,这篇帖子中的一些命令可以为你找到多个重复文件 。
使用校验和【如何在 Linux 上识别同样内容的文件】cksum(checksum) 命令计算文件的校验和 。校验和是一种将文字内容转化成一个长数字(例如2819078353 228029)的数学简化 。虽然校验和并不是完全独有的,但是文件内容不同校验和却相同的概率微乎其微 。
$ cksum *.html2819078353 228029 backup.html4073570409 227985 home.html4073570409 227985 index.html在上述示例中,你可以看到产生同样校验和的第二个和第三个文件是如何可以被默认为相同的 。
使用 find 命令虽然 find 命令并没有寻找重复文件的选项,它依然可以被用来通过名字或类型寻找文件并运行 cksum 命令 。例如:
$ find . -name "*.html" -exec cksum {} ;4073570409 227985 ./home.html2819078353 228029 ./backup.html4073570409 227985 ./index.html使用 fslint 命令fslint 命令可以被特地用来寻找重复文件 。注意我们给了它一个起始位置 。如果它需要遍历相当多的文件,这就需要花点时间来完成 。注意它是如何列出重复文件并寻找其它问题的,比如空目录和坏 ID 。
$ fslint .-----------------------------------file name lint-------------------------------Invalid utf8 names-----------------------------------file case lint----------------------------------DUPlicate files <==home.htmlindex.html-----------------------------------Dangling links--------------------redundant characters in links------------------------------------suspect links--------------------------------Empty Directories./.gnupg----------------------------------Temporary Files----------------------duplicate/conflicting Names------------------------------------------Bad ids-------------------------Non Stripped executables你可能需要在你的系统上安装 fslint 。你可能也需要将它加入你的命令搜索路径:
$ export PATH=$PATH:/usr/share/fslint/fslint使用 rdfind 命令rdfind 命令也会寻找重复(相同内容的)文件 。它的名字意即“重复数据搜寻”,并且它能够基于文件日期判断哪个文件是原件——这在你选择删除副本时很有用因为它会移除较新的文件 。
$ rdfind ~Now scanning "/home/shark", found 12 files.Now have 12 files in total.Removed 1 files due to nonunique device and inode.Total size is 699498 bytes or 683 KiBRemoved 9 files due to unique sizes from list.2 files left.Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.Now eliminating candidates based on sha1 checksum:removed 0 files from list.2 files left.It seems like you have 2 files that are not uniqueTotally, 223 KiB can be reduced.Now making results file results.txt你可以在 dryrun 模式中运行这个命令 (换句话说,仅仅汇报可能会另外被做出的改动) 。
$ rdfind -dryrun true ~(DRYRUN MODE) Now scanning "/home/shark", found 12 files.(DRYRUN MODE) Now have 12 files in total.(DRYRUN MODE) Removed 1 files due to nonunique device and inode.(DRYRUN MODE) Total size is 699352 bytes or 683 KiBRemoved 9 files due to unique sizes from list.2 files left.(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.(DRYRUN MODE) Now eliminating candidates based on sha1 checksum:removed 0 files from list.2 files left.(DRYRUN MODE) It seems like you have 2 files that are not unique(DRYRUN MODE) Totally, 223 KiB can be reduced.(DRYRUN MODE) Now making results file results.txt
推荐阅读
- 自媒体是如何赚钱的?简单来说可以分为以下10类
- SQL小技巧:一张表中存在两行完全一致的数据,如何删除?
- Linux 目录结构
- 5 个 Linux 新手会犯的失误
- Linux中netstat命令查看网络状态
- Go 中如何优雅关闭子进程?
- 如何排查常见挖矿木马
- Linux命令存放目录bin的体系结构分析
- Linux怎么设置系统环境变量之export命令详解
- JavaScript 究竟是如何工作的?
