Я могу изменить статус блокировки файла («только чтение») в контекстном меню файла:
Для этого пункта меню нет.
Как создать пункт меню Finder (контекстное) для более быстрой установки, удаления или переключения этого флага?
решение1
Вы можете создать новый пункт меню, который делает это, создавУслугакоторый получаетфайлы и папкикак вход влюбое приложениев Автоматоре.
У вас есть два варианта реализации. Выберите одно из двух действий Automator для построения рабочего процесса Service:
- Запустить скрипт оболочки
- Запустить AppleScript
Приведенный ниже код реализуетПереключатькоманда, так как она самая сложная.
Запустить скрипт оболочки
Этот вариант использует stat
для чтения флагов, установленных для файла. Это те же значения, которые обычно отображаются при запуске ls -lO
, но stat
это более чистое решение для чтения значений. Заблокированный флаг, или uchg
, имеет значение 0x2
, поэтому мы его и проверяем.
chflags
используется для изменения значения, и growlnotify
, необязательная частьРычание, используется для отображения сообщений об успешном выполнении или ошибках.
Используйте следующий фрагмент кода 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
Используйте следующий фрагмент кода 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
Если действие не удалось выполнить, например, из-за отсутствия разрешений, отображается одно диалоговое окно для каждого файла, который не удалось изменить.