前言:
现在各位老铁们对“c语言检查数中重复的数”大致比较注重,咱们都需要剖析一些“c语言检查数中重复的数”的相关内容。那么小编在网摘上网罗了一些对于“c语言检查数中重复的数””的相关知识,希望姐妹们能喜欢,各位老铁们快快来了解一下吧!现在把之前学习的内容组合起来,看看能做一个什么实际有用的操作。假如我们有一个目录下存放着大量的jpg图像文件,想知道有没有重复的图像:
$ lsimage001.jpg image005.jpg image009.jpg image013.jpg image017.jpgimage002.jpg image006.jpg image010.jpg image014.jpg image018.jpg⋮
这里需要用到md5sum命令,它可以计算文件内容的md5校验和:
$ md5sum image001.jpg146b163929b6533f02e91bdf21cb9563 image001.jpg
md5是一种哈希算法,这种算法在数学上的特点是单向,根据输入数据计算一个固定大小的输出,并且如果输出结果不同,则基本上可以断定输入不同。除了md5之外,目前主要主流的是sha256、sha512。示例中md5sum表示第一个和第三个文件是内容相同的:
$ md5sum image001.jpg image002.jpg image003.jpg146b163929b6533f02e91bdf21cb9563 image001.jpg63da88b3ddde0843c94269638dfa6958 image002.jpg146b163929b6533f02e91bdf21cb9563 image003.jpg
如果文件数量很多,就很难通过肉眼去识别了。下面的命令可以得到目录下所有文件的校验和:
$ md5sum *.jpg | cut -c1-32 | sort1258012d57050ef6005739d0e6f6a257146b163929b6533f02e91bdf21cb9563146b163929b6533f02e91bdf21cb956317f339ed03733f402f74cf386209aeb3⋮
现在增加 uniq 来计算重复的行:
$ md5sum *.jpg | cut -c1-32 | sort | uniq -c 1 1258012d57050ef6005739d0e6f6a257 2 146b163929b6533f02e91bdf21cb9563 1 17f339ed03733f402f74cf386209aeb3⋮
如果没有重复项,则 uniq 生成的所有计数都为 1。按数字从高到低对结果进行排序:
$ md5sum *.jpg | cut -c1-32 | sort | uniq -c | sort -nr 3 f6464ed766daca87ba407aede21c8fcc 2 c7978522c58425f6af3f095ef1de1cd5 2 146b163929b6533f02e91bdf21cb9563 1 d8ad913044a51408ec1ed8a204ea9502⋮
校验和前面有六个空格,一个数字和一个空格。使用 grep -v 删除没有重复项的行:
$ md5sum *.jpg | cut -c1-32 | sort | uniq -c | sort -nr | grep -v " 1 " 3 f6464ed766daca87ba407aede21c8fcc 2 c7978522c58425f6af3f095ef1de1cd5 2 146b163929b6533f02e91bdf21cb9563
这样就可以得到一个具有重复校验和的列表,通过使用 grep 搜索来识别具有给定校验和的文件:
$ md5sum *.jpg | grep 146b163929b6533f02e91bdf21cb9563146b163929b6533f02e91bdf21cb9563 image001.jpg146b163929b6533f02e91bdf21cb9563 image003.jpg
使用cut输出:
$ md5sum *.jpg | grep 146b163929b6533f02e91bdf21cb9563 | cut -c35-image001.jpgimage003.jpg
这个例子主要是演示管道的用法,实际上还不是那么有用,如果能显示重复项的文件名会更好,这点在后面改进。
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言检查数中重复的数