What is the best way to make Calculate SHA1 as a context menu option in Mac OS X?
- Open Automator
- Create new service
- Choose to receive selected Files and Folders in Finder (note: this actually won't work too well on folders...)
-
Add action Run Shell Script, set Shell to /bin/bash and Pass input to "as arguments", and enter this script:
for file; do if [[ -d "$file" ]]; then echo "$(basename "$file") is a directory" else cd "$(dirname "$file")" /usr/bin/openssl sha1 "$(basename "$file")" fi done | tr "\n" "\r"
-
Add action Run Applescript, and enter this script:
on run {input, parameters} tell application "System Events" activate display dialog input buttons {"OK"} default button 1 end tell end run
Save the service with a descriptive name
I took Gordon's excellent answer as a starting point and embellished it a little bit. Posting those changes here in case anyone else might find them useful. My version calculates the MD5 as well as the SHA1 hashes (in a more readable format) and will also time out after 5 minutes if you forget to click the "OK" button instead of throwing an AppleScript error.
Shell Script
for file; do
if [[ -d "$file" ]]; then
echo "$(basename "$file") is a directory"
else
cd "$(dirname "$file")"
echo -e "$(basename "$file")\r"
echo -n "MD5: "
/usr/bin/openssl md5 "$(basename "$file")" | egrep -o [a-f0-9]{32}
echo -n "SHA1: "
/usr/bin/openssl sha1 "$(basename "$file")" | egrep -o [a-f0-9]{40}
fi
done | tr "\n" "\r"
AppleScript
on run {input, parameters}
with timeout of 360 seconds
tell application "System Events"
activate
display dialog input buttons {"OK"} default button 1 with title "Cryptographic Hashes" giving up after 300 --seconds
end tell
end timeout
end run