3

Я могу изменить статус блокировки файла ("только для чтения") в контекстном меню файла:

Там нет пункта меню для этого.

Как я могу создать пункт контекстного меню Finder для более быстрой установки, удаления или переключения этого флага?

1 ответ1

4

Вы можете создать новый пункт меню, который делает это, создав Сервис, который получает файлы и папки в качестве входных данных в любом приложении в Automator.

У вас есть два варианта реализации. Выберите одно из двух действий Automator для построения рабочего процесса Service с помощью:

  • Запустить Shell Script
  • Запустите AppleScript

Приведенный ниже код реализует команду Toggle , поскольку она наиболее сложна.

Запустить Shell Script

Этот вариант использует stat для чтения флагов, установленных для файла. Это те же значения, которые обычно отображаются при запуске ls -lO , но stat - более чистое решение для чтения значений. Флаг блокировки, или uchg , имеет значение 0x2 , поэтому мы проверяем это.

chflags используется для изменения значения и growlnotify , необязательной части Growl , используемой для отображения сообщений об успехе или ошибках.

Используйте следующий фрагмент кода bash-скрипта как часть действия Run Shell Script:

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

Используйте следующий фрагмент кода 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

Если действие не выполнено, например, из-за отсутствия разрешений, для каждого файла отображается одно диалоговое окно, которое не удалось изменить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .