Я могу изменить статус блокировки файла ("только для чтения") в контекстном меню файла:
Там нет пункта меню для этого.
Как я могу создать пункт контекстного меню Finder для более быстрой установки, удаления или переключения этого флага?
Вы можете создать новый пункт меню, который делает это, создав Сервис, который получает файлы и папки в качестве входных данных в любом приложении в Automator.
У вас есть два варианта реализации. Выберите одно из двух действий Automator для построения рабочего процесса Service с помощью:
Приведенный ниже код реализует команду Toggle , поскольку она наиболее сложна.
Этот вариант использует 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»:
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
Если действие не выполнено, например, из-за отсутствия разрешений, для каждого файла отображается одно диалоговое окно, которое не удалось изменить.