有时文件副本相当于对硬盘空间的巨大浪费,并会在你想要更新文件时造成困扰。以下是用来识别这些文件的六个命令。
在最近的帖子中,我们看了如何识别并定位硬链接的文件(即,指向同一硬盘内容并共享 inode)。在本文中,我们将查看能找到具有相同内容,却不相链接的文件的命令。
硬链接很有用是因为它们能够使文件存放在文件系统内的多个地方却不会占用额外的硬盘空间。另一方面,有时文件副本相当于对硬盘空间的巨大浪费,在你想要更新文件时也会有造成困扰之虞。在本文中,我们将看一下多种识别这些文件的方式。
用 diff 命令比较文件
可能比较两个文件最简单的方法是使用 diff
命令。输出会显示你文件的不同之处。 符号代表在当参数传过来的第一个(
)文件中是否有额外的文字行。在这个例子中,在
backup.html
中有额外的文字行。
$ diff index.html backup.html 2438a2439,2441 >
> That's all there is to report. >如果
diff
没有输出那代表两个文件相同。$ diff home.html index.html $
diff
的唯一缺点是它一次只能比较两个文件并且你必须指定用来比较的文件,这篇帖子中的一些命令可以为你找到多个重复文件。使用校验和
cksum
(checksum) 命令计算文件的校验和。校验和是一种将文字内容转化成一个长数字(例如2819078353 228029)的数学简化。虽然校验和并不是完全独有的,但是文件内容不同校验和却相同的概率微乎其微。$ cksum *.html 2819078353 228029 backup.html 4073570409 227985 home.html 4073570409 227985 index.html
在上述示例中,你可以看到产生同样校验和的第二个和第三个文件是如何可以被默认为相同的。
使用 find 命令
虽然
find
命令并没有寻找重复文件的选项,它依然可以被用来通过名字或类型寻找文件并运行cksum
命令。例如:$ find . -name "*.html" -exec cksum {} \; 4073570409 227985 ./home.html 2819078353 228029 ./backup.html 4073570409 227985 ./index.html
使用 fslint 命令
fslint
命令可以被特地用来寻找重复文件。注意我们给了它一个起始位置。如果它需要遍历相当多的文件,这就需要花点时间来完成。注意它是如何列出重复文件并寻找其它问题的,比如空目录和坏 ID。$ fslint .
-----------------------------------file name lint
-------------------------------Invalid utf8 names
-----------------------------------file case lint
----------------------------------DUPlicate files