Aquí hay dos enfoques diferentes que se pueden tomar, uno usando Automatizador y AppleScript y el otro utilizando un bash
script y Terminal .
Uso de Automator y AppleScript
Lo siguiente ejemplo AppleScript código , utilizado en un Automatizador Servicio 1 , ajustado a Servicio que recibe seleccionado files or folders
en Finder
con un Ejecutar AppleScript acción permitirá pegar una copia de MD5 , SHA1 , SHA256 o SHA512 valor de la suma de comprobación en un cuadro de diálogo y verificarlo con el archivo en Buscador .
En MacOS High Sierra , he guardado el Automatizador Servicio 1 como Verificar la suma de comprobación pegada . Entonces en Buscador seleccionar una descarga archivo para el que tenía un suma de comprobación copiado en el portapapeles, hice clic con el botón derecho y seleccioné Verificar la suma de comprobación pegada de la Servicios menú contextual. A continuación, pegué en la copia suma de comprobación y presionó el Entre en clave . A continuación, devolvió el mensaje correspondiente.
- <sup>1 </sup>En <strong>MacOS Mojave </strong>y más tarde, un <strong>Automatizador </strong><em>Servicio </em>se llama <em>Acción rápida </em>. También hay otras diferencias menores de nomenclatura, pero deberían ser más obvias al compararlas con los flujos de trabajo de Automator anteriores a MacOS Mojave.
Ejemplo AppleScript código :
global pastedChecksum
global fileToCaculateChecksum
on run {input}
set fileToCaculateChecksum to POSIX path of first item of input
set pastedChecksum to text returned of (display dialog ¬
"Paste checksum here:" buttons {"Cancel", "Verify Checksum"} default button ¬
"Verify Checksum" default answer "" with title "Verify Checksum Matches Provided Value")
set L to (length of pastedChecksum)
if L = 32 then
-- Validate MD5 checksum.
set caculatedChecksum to do shell script "/sbin/md5 -q " & fileToCaculateChecksum's quoted form
displayValidationMessage(caculatedChecksum)
else if L = 40 then
-- Validate SHA1 checksum.
set caculatedChecksum to do shell script "/usr/bin/shasum " & fileToCaculateChecksum's quoted form & " | /usr/bin/awk '{print $1}'"
displayValidationMessage(caculatedChecksum)
else if L = 64 then
-- Validate SHA256 checksum.
set caculatedChecksum to do shell script "/usr/bin/shasum -a 256 " & fileToCaculateChecksum's quoted form & " | /usr/bin/awk '{print $1}'"
displayValidationMessage(caculatedChecksum)
else if L = 128 then
-- Validate SHA512 checksum.
set caculatedChecksum to do shell script "/usr/bin/shasum -a 512 " & fileToCaculateChecksum's quoted form & " | /usr/bin/awk '{print $1}'"
displayValidationMessage(caculatedChecksum)
else
-- Unrecognized checksum.
display dialog "The length of the pasted checksum was not recognized!" buttons {"OK"} ¬
default button 1 with title "Unrecognized Checksum" with icon caution
end if
end run
on displayValidationMessage(caculatedChecksum)
if pastedChecksum is equal to caculatedChecksum then
-- Checksum matched.
display dialog "The checksum for '" & fileToCaculateChecksum & "' matched!" buttons {"OK"} ¬
default button 1 with title "Valid Checksum"
else
-- Checksum did not match.
display dialog "The checksum for '" & fileToCaculateChecksum & "' did not match!" buttons {"OK"} ¬
default button 1 with title "Bad Checksum" with icon stop
end if
end displayValidationMessage
- Desplácese para ver más <em>código </em>.
Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y no contiene ningún <em>error </em>de la forma más adecuada. Es responsabilidad del usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>pruebe con </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>.
Uso de bash y Terminal
Si quieres un bash
solución para Terminal utilice lo siguiente ejemplo bash
código , guardado en un archivo y se hizo ejecutable con chmod
.
En Terminal :
touch vpc
open vpc
Copiar y pegar el ejemplo bash
código , que se muestra más abajo, en el documento abierto, y luego guárdelo y ciérrelo.
De vuelta en Terminal :
chmod u+x vpc
./vpc
Nota: He utilizado vpc
para: [V]erify [P]asted [C]hecksum
También puede colocar el, por ejemplo, vpc
ejecutable en un directorio que está dentro de su PATH
y poder utilizarlo sin ./
o su nombre de ruta calificado completo .
Ejemplo bash
código :
#!/bin/bash
if [[ $# -ne 2 ]]; then
echo " Missing argument!"
echo " Uasge: vpc pasted_checksum filename"
echo " Example: vpc 98d9402a8b446bdd57b4b6729b4d575e /path/to/filename"
exit 1
fi
l=$(/usr/bin/awk -v var="$1" 'BEGIN {print length(var)}')
[ -f "$2" ] || l=0
case "$l" in
32 )
# Validate MD5 checksum.
c="$(/sbin/md5 -q "$2")"
;;
40 )
# Validate SHA1 checksum.
c="$(/usr/bin/shasum "$2" | /usr/bin/awk '{print $1}')"
;;
64 )
# ValidateSHA256 checksum.
c="$(/usr/bin/shasum -a 256 "$2" | /usr/bin/awk '{print $1}')"
;;
128 )
# Validate SHA512checksum.
c="$(/usr/bin/shasum -a 512 "$2" | /usr/bin/awk '{print $1}')"
;;
0 )
echo " Bad Filename!"
exit 1
;;
* )
echo " Unreconized Checksum!"
exit 1
;;
esac
# Verify checksum matches provided value, using case insensitive matching.
shopt -s nocasematch
if [[ $1 == "$c" ]]; then
echo " The checksum for '""$2""' matched."
else
echo " The checksum for '""$2""' did not match!"
fi
shopt -u nocasematch
- Desplácese para ver más <em>código </em>.
<strong>Nota: </strong>El <em>ejemplo </em><code>bash</code> <em>código </em>contiene algunos <em>tratamiento de errores </em>. Es responsabilidad del usuario añadir cualquier otro <em>tratamiento de errores </em>como sea apropiado, necesario o deseado.