web-dev-qa-db-ja.com

Finderでファイルをより迅速にロック/ロック解除するためのコンテキストメニュー項目

ファイルのコンテキストメニューでファイルロック(「読み取り専用」)ステータスを変更できます。

enter image description here

このためのメニュー項目はありません。

このフラグをよりすばやく設定、削除、または切り替えるためのFinder(コンテキスト)メニュー項目を作成するにはどうすればよいですか?

3
Daniel Beck

Automatorの任意のアプリケーションの入力としてファイルとフォルダーを受け取るサービスを作成することにより、それを行う新しいメニュー項目を作成できます。

2つの実装オプションがあります。次の2つのAutomatorアクションのいずれかを選択して、サービスワークフローを構築します。

  • シェルスクリプトを実行する
  • AppleScriptを実行する

以下のコードは、最も複雑なため、Toggleコマンドを実装しています。

シェルスクリプトを実行する

このバリアントは、statを使用してファイルに設定されたフラグを読み取ります。これらは、ls -lOを実行して通常表示される値と同じですが、statは値を読み取るためのよりクリーンなソリューションです。ロックされたフラグ、つまりuchgの値は0x2であるため、これを確認しています。

chflagsは値を変更するために使用され、growlnotifyGrowl のオプション部分であり、成功またはエラーメッセージを表示するために使用されます。

enter image description here

シェルスクリプトの実行アクションの一部として、次のbashスクリプトコードスニペットを使用します。

for f in "$@"
do
    let "$( stat -f "%f" "$f" ) & 0x2"
    if [ $? -ne 0 ] ; then
        chflags uchg "$f" || /usr/local/bin/growlnotify "Error" -m "Failed to lock $f!"
        /usr/local/bin/growlnotify "Locked File" -m "$f was locked!"
    else
        chflags nouchg "$f" || /usr/local/bin/growlnotify "Error" -m "Failed to unlock $f!"
        /usr/local/bin/growlnotify "Unlocked File" -m "$f was unlocked!"
    fi
done

入力を受け取るようにアクションを構成します引数として

AppleScriptを実行する

Run AppleScriptアクションの一部として、次のAppleScriptコードスニペットを使用します。

on run {input, parameters}
repeat with f in input
        try
            tell application "Finder" to set locked of f to (not locked of f)
        on error errmsg
            tell application "Finder" to display alert errmsg
        end try
    end repeat
end run

アクションが失敗した場合、例:権限がないため、変更に失敗したファイルごとに1つのダイアログが表示されます。

enter image description here

4
Daniel Beck