#!/bin/bash ######################################################################## ###This script file will compare the checksums from two places - one ### ###from the object list (systemmetadata); the other is the calculation## ###from the file (the checksum api call). If they don't match the pid### ###will be written to a file ### ######################################################################## count=3 url="https://sfwmd.dataone.org/metacat/d1/mn/v2/object?count=$count" checksumUrl="https://sfwmd.dataone.org/metacat/d1/mn/v2/checksum/" errorFile="sfwmd_wrong_checksum.txt" objectFile="sfwmd_object.xml" algorithm="MD5" token="" rm $errorFile touch $errorFile curl -H "Authorization: Bearer $token" $url > $objectFile xmlstarlet sel -t -m "//objectInfo" -v "concat(identifier/text(), ' ', checksum/text())" -n $objectFile | while IFS= read -r pid_checksum; do read -r pid checksum <<< "$pid_checksum" echo "------------------------" echo "$pid" echo "$checksum" result=$(curl -H "Authorization: Bearer $token" "$checksumUrl$pid?checksumAlgorithm=MD5") checksumFromServer=$(xmlstarlet sel -N ns2="http://ns.dataone.org/service/types/v1" -t -m "//ns2:checksum[@algorithm='MD5']" -v . <<<"$result") echo "$checksumFromServer" if [[ "$checksum" == "$checksumFromServer" ]]; then echo "Checksums are equal." else echo "$pid $checksum $checksumFromServer" >> "$errorFile" echo "Checksums are not equal!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1" fi done rm $objectFile