md5sum из списка файлов, перечисленных с помощью find - PullRequest
0 голосов
/ 14 мая 2019

Можно ли получить одну строку md5 для файлов, перечисленных в find?

Этот код создает некоторую хеш-строку 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

Изменен один json в temp2:

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

Метод с котом дает действительные результаты:

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

Ответы [ 2 ]

3 голосов
/ 14 мая 2019
cat $(find my_dir -name "*.jpg") | md5

Если в имени файла есть пробел

find my_dir -name "*.jpg" -exec cat {} \; | md
0 голосов
/ 14 мая 2019

То, что вы можете сделать, это md5sum из md5sum:

, включая имя файла / dirname / 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
...