Você pode criar um novo item de menu que faz isso criando um Serviço que recebe arquivos e pastas como entrada em qualquer aplicativo no Automator .
Você tem duas opções de implementação. Escolha uma das duas ações do Automator para criar o fluxo de trabalho do Serviço com:
- Executar script de shell
- Executar o AppleScript
O código abaixo implementa o comando Toggle , já que é o mais complexo.
Executar script de shell
Esta variante usa stat
para ler os sinalizadores definidos para o arquivo. Estes são os mesmos valores normalmente exibidos executando ls -lO
, mas stat
é uma solução mais limpa para ler os valores. O sinalizador bloqueado, ou uchg
, tem o valor 0x2
, e é isso que estamos verificando.
chflags
é usado para alterar o valor e growlnotify
, parte opcional de Growl , usado para exibir mensagens de sucesso ou de erro.
Use o seguinte trecho de código de script bash como parte da ação Executar script de shell:
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
Configure a ação para receber a entrada como argumentos .
Executar o AppleScript
Use o seguinte snippet de código AppleScript como parte da ação Executar 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
Se a ação falhar, por ex. porque as permissões estão faltando, um diálogo é exibido por arquivo que não foi alterado.