web-dev-qa-db-ja.com

Mac OS XでSHA1をコンテキストメニューオプションとして計算するための最良の方法は何ですか?

ダウンロードしたファイルのSHA1チェックサムを計算するために、次のように入力します。

/usr/bin/openssl sha1

ターミナルで、チェックしたいファイルをそこにドラッグします。簡単にするために、このアクションのコンテキストメニュー項目を有効にすることができます。

Mac OS X 10.6でそのようなアイテムを作成する最良の方法は何ですか?私はAppleScriptなどの経験があまりないので、詳細な回答をいただければ幸いです。


ステップバイステップ

  1. Automatorを開く
  2. 新しいサービスを作成する
  3. Finderで選択したファイルとフォルダを受け取ることを選択します
  4. アクションを追加するbashコマンドが/usr/bin/openssl sha1 "$@"で、入力を引数として渡すシェルスクリプトを実行する

どうすれば出力を取得できますか?できれば、Growlポップアップまたはメッセージウィンドウ/ダイアログで。

6
Andrei
  1. Automatorを開く
  2. 新しいサービスを作成する
  3. Finderで選択したファイルとフォルダを受け取ることを選択します(注:これは実際にはフォルダではうまく機能しません...)
  4. アクションの追加シェルスクリプトを実行し、シェルを/ 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. わかりやすい名前でサービスを保存します

9
Gordon Davisson

私はゴードンの優れた答えを出発点として、それを少し装飾しました。他の誰かがそれらを役に立つと思うかもしれない場合に備えて、ここにそれらの変更を投稿してください。私のバージョンでは、MD5とSHA1ハッシュ(より読みやすい形式)が計算され、AppleScriptエラーをスローする代わりに[OK]ボタンをクリックするのを忘れると、5分後にタイムアウトになります。

シェルスクリプト

    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
3
luckman212