在 Mac OS X 中将计算 SHA1 作为上下文菜单选项的最佳方法是什么?

在 Mac OS X 中将计算 SHA1 作为上下文菜单选项的最佳方法是什么?

为了计算下载文件的 SHA1 校验和,我可以输入

/usr/bin/openssl sha1

在终端中,然后将要检查的文件拖到那里。为了更简单,可以为此操作启用上下文菜单项。

在 Mac OS X 10.6 中创建此类项目的最佳方法是什么? 非常感谢您的详细回答,因为我对 AppleScript 等没有很好的经验。


一步步

  1. 打开 Automator
  2. 创建新服务
  3. 选择在 Finder 中接收选定的文件和文件夹
  4. 添加操作运行 Shell 脚本,其中您的 bash 命令/usr/bin/openssl sha1 "$@"并将输入作为参数传递

我如何获取输出?最好是在 Growl 弹出窗口或消息窗口/对话框中。

答案1

  1. 打开 Automator
  2. 创建新服务
  3. 选择在 Finder 中接收选定的文件和文件夹(注意:这实际上对文件夹不太有效......)
  4. 添加操作运行 Shell 脚本,将 Shell 设置为 /bin/bash 并将输入传递给“作为参数”,然后输入此脚本:

    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"
    
  5. 添加操作运行Applescript,并输入此脚本:

    on run {input, parameters}
        tell application "System Events"
            activate
            display dialog input buttons {"OK"} default button 1
        end tell
    end run
    
  6. 使用描述性名称保存服务

答案2

我以 Gordon 的出色回答为起点,并对其进行了少许润色。将这些更改发布在这里,以防其他人发现它们有用。我的版本计算 MD5 以及 SHA1 哈希值(以更易读的格式),如果您忘记单击“确定”按钮,而不是抛出 AppleScript 错误,5 分钟后也会超时。

Shell 脚本

    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"

苹果脚本

    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

相关内容