【问题标题】:md5sum of list of files listed by findfind 列出的文件列表的 md5sum
【发布时间】:2019-10-01 03:18:29
【问题描述】:

是否可以为find 列出的文件获取单个 md5 字符串?

这段代码生成了一些 md5 哈希字符串,但似乎只使用文件名,但我还需要使用内容:

find my_dir -name "*.jpg" | md5

对 json 文件进行测试:

tree temp_dir

temp_dir
├── temp_1
│   ├── 071-FBA-227597_custom_faceboxes_face_bbox.json
│   └── 083-FBA-228758_custom_faceboxes_face_bbox.json
└── temp_2
    ├── 071-FBA-227597_custom_faceboxes_face_bbox.json
    └── 083-FBA-228758_custom_faceboxes_face_bbox.json

temp2中的一个json被修改:

md5 temp_dir/temp_1/071-FBA-227597_custom_faceboxes_face_bbox.json
MD5 (temp_dir/temp_1/071-FBA-227597_custom_faceboxes_face_bbox.json) = 8da7666a1cf7f68b102a2ebb2ce01eae

md5 temp_dir/temp_1/083-FBA-228758_custom_faceboxes_face_bbox.json
MD5 (temp_dir/temp_1/083-FBA-228758_custom_faceboxes_face_bbox.json) = 93afe3b2b627948ff870496bf8302b85

md5 temp_dir/temp_2/071-FBA-227597_custom_faceboxes_face_bbox.json
MD5 (temp_dir/temp_2/071-FBA-227597_custom_faceboxes_face_bbox.json) = 8da7666a1cf7f68b102a2ebb2ce01eae

md5 temp_dir/temp_2/083-FBA-228758_custom_faceboxes_face_bbox.json
MD5 (temp_dir/temp_2/083-FBA-228758_custom_faceboxes_face_bbox.json) = 6308ef748f5c9a895d36bc8a71b37112

由于某种原因,文件路径列表上的 md5 不同,这是预期的吗?:

find temp_1 -name "*.json"
temp_1/071-FBA-227597_custom_faceboxes_face_bbox.json
temp_1/083-FBA-228758_custom_faceboxes_face_bbox.json

find temp_2 -name "*.json"
temp_2/071-FBA-227597_custom_faceboxes_face_bbox.json
temp_2/083-FBA-228758_custom_faceboxes_face_bbox.json

find temp_1 -name "*.json" | md5
ed0b14613ce97542a4e5531ff196378f

find temp_2 -name "*.json" | md5
50d0ded6eb3bf396a0b1c091c9067fdc

我也试过只复制 temp_1 并创建 temp_3,但它也给出了不同的哈希值,这是预期的吗?:

find temp_3 -name "*.json"
temp_3/071-FBA-227597_custom_faceboxes_face_bbox.json
temp_3/083-FBA-228758_custom_faceboxes_face_bbox.json

find temp_3 -name "*.json" | md5
f62473085a4b32b287ead4f8f9e67e15

md5 temp_3/071-FBA-227597_custom_faceboxes_face_bbox.json
MD5 (temp_3/071-FBA-227597_custom_faceboxes_face_bbox.json) = 8da7666a1cf7f68b102a2ebb2ce01eae

md5 temp_3/083-FBA-228758_custom_faceboxes_face_bbox.json
MD5 (temp_3/083-FBA-228758_custom_faceboxes_face_bbox.json) = 93afe3b2b627948ff870496bf8302b85

使用 cat 的方法产生有效结果:

find temp_1 -name "*.json" -exec cat {} \; | md5
b2abfe623e93153598d6625930f934f2

find temp_2 -name "*.json" -exec cat {} \; | md5
c64eb7a0a8749b11aa11a0312d37f81f

find temp_3 -name "*.json" -exec cat {} \; | md5
b2abfe623e93153598d6625930f934f2

【问题讨论】:

  • 你可以通过md5找到所有的文件cat像这样find my_dir -name "*.jpg" -exec cat {} \; | md5
  • @MarkSetchell \; 是什么意思?

标签: bash macos find md5sum


【解决方案1】:
cat $(find my_dir -name "*.jpg") | md5

如果文件名中有空格

find my_dir -name "*.jpg" -exec cat {} \; | md

【讨论】:

  • 这将为每个文件生成 md5 哈希,但我需要为所有文件生成单个 md5 哈希。
  • 产生与@Mark Setchell 的find my_dir -name "*.jpg" -exec cat {} \; | md5 相同的结果
  • @mrgloom 你到底想要什么?
  • 因为 find temp_1 -name ".json" 和 find temp_3 -name ".json" 产生不同的输出
  • @mrgloom 当您的文件名中没有空格时,此输出仅与我的评论相同。如果有空格,则此答案无效。
【解决方案2】:

您可以做的是md5summd5sum

包括文件名/目录名/md5sum:

find . -type f -iname '*.jpg' -exec md5sum {} \; | md5sum

这会从列表中返回一个 md5sum,如下所示:

d9a881340010ad5df0b5cd99aadb327f   ./path/to/file1.jpg
8b3b2a7b974af9eea72da94c1ca02b8a   ./path/file2.jpg

包括文件名/md5sum:

find . -type f -iname '*.jpg' -exec md5sum {} \; | awk -F'/' '{print substr($0,1,32),$NF}' | md5sum

这会从列表中返回一个 md5sum,如下所示:

d9a881340010ad5df0b5cd99aadb327f file1.jpg
8b3b2a7b974af9eea72da94c1ca02b8a file2.jpg

包括 md5sum:

find . -type f -iname '*.jpg' -exec md5sum {} \; | cut -d" " -f1 | md5sum

这会从列表中返回一个 md5sum,如下所示:

d9a881340010ad5df0b5cd99aadb327f
8b3b2a7b974af9eea72da94c1ca02b8a

【讨论】:

  • 我的意思是文件路径列表的单个 md5 哈希,请参阅更新以进行说明。
  • @mrgloom 您原来的问题是:这段代码产生了一些 md5 哈希字符串,但似乎只使用文件名,但我也需要使用内容 . 上述任何示例都将为所选文件生成单个 md5sum,包括其内容。我提供了 3 个选项(包含完整路径、仅包含文件名、无文件名)。呈现的 md5 输出是显示 md5sum 再次解析什么以产生最终结果的示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 2014-12-26
相关资源
最近更新 更多