In realtà, Automator non è una cattiva scelta per questo, in quanto consente di combinare AppleScript e script di shell senza doverli mescolare (che ti porta dritto a fuggire dall'inferno, dopo una breve sosta nel citare il purgatorio) e passare i valori tra di loro una moda ordinata. Inoltre, oltre a un'applicazione droplet, Automator ti permetterà di creare un servizio con un'eccellente integrazione nel Finder:
- Crea un nuovo flusso di lavoro di Automator.
- selezionare "Applicazione" quando viene richiesto il tipo di flusso di lavoro da creare - che ti porterà un droplet che elabora i file e le cartelle che gli vengono inviati, oppure
- seleziona "Servizio" e imposta "Accetta selezionato" su "file e cartelle" - che ti porterà un oggetto nel Finder Services e nel menu di scelta rapida dei file e delle cartelle (tutte le traduzioni sono approssimative, sono su un sistema tedesco) .
-
Aggiungi un'azione "Esegui AppleScript" e modifica il suo contenuto come segue:
on run {input, parameters}
try
tell application "System Events" to set thePassword to text returned of (display dialog "Please input your password for OpenSSL encryption" default answer "" with hidden answer)
on error errorMessage number errorNumber
if errorNumber is -128 then quit me -- user has canceled
error errorMessage number errorNumber
end try
return (thePassword as list) & input
end run
- questo richiederà all'utente la password di crittografia e la passerà come primo argomento all'azione successiva.
-
Aggiungi un'azione "Esegui script shell", impostandola per ottenere il suo input tramite argomenti (non stdin
, come predefinito). Assicurati che la shell sia impostata su /bin/bash
. Modifica il contenuto della sceneggiatura come segue:
[[ -n $1 ]] && password="$1" && shift || exit 0
for f in "$@"; do
if [[ ${f##*.} = "encrypted" ]]; then
fname="${f%.encrypted}"
openssl enc -d -aes-256-cbc -salt -in "$f" -out "$fname".tar.gz -pass pass:$password || continue
tar -xPf "$fname".tar.gz && rm "$fname".tar.gz || continue
else
fname=$([[ -f $f ]] && printf "${f%.*}" || printf "$f")
tar -czPf "$fname".tar.gz "$f" || continue
openssl enc -aes-256-cbc -salt -in "$fname".tar.gz -out "$fname".encrypted -pass pass:$password && rm -f "$fname".tar.gz || continue
fi
done
- questo decrittografa e untar-gzip .encrypted
file, tar-gzip e crittografa tutti gli altri file e directory con la crittografia AES 256-CBC e la password fornita.
Caveat Empteor: la gestione degli errori è primitiva (in pratica, il ciclo for
salta un'iterazione quando incontra un errore), non vi è alcuna registrazione e non vi è alcun fail-safe contro gli input errati della password (tu potrebbe voler chiedere due volte e confrontare i risultati, come fa l'utilità della shell). Tuttavia, i disastri non dovrebbero accadere, poiché i file vengono eliminati solo quando i passaggi precedenti vengono completati correttamente.
Infine, potresti voler esaminare le alternative alla richiesta di una password: un passphrase su una chiave USB, ad esempio (usa -pass file:/Volumes/volname/passfile
invece di -pass pass:$password
, salta il passo Applescript e rimuovi la prima riga dello script della shell ), o memorizzare la password nel portachiavi di OS X e recuperarla a livello di programmazione (vedere questa mia risposta su Stack Exchange per i modi per farlo).