En realidad, Automator no es una mala elección para esto, ya que te permite combinar AppleScript y shell scripting sin tener que mezclarlos (lo que te lleva directamente a escapar del infierno, después de una breve estadía en citar el purgatorio) y pasar valores Entre ellos una moda ordenada. Además, además de una aplicación de gota, Automator le permitirá crear un Servicio con una excelente integración en el Finder:
- Crear un nuevo flujo de trabajo de Automator.
- seleccione "Aplicación" cuando se le pregunte qué tipo de flujo de trabajo debe crear, que le proporcionará una gota que procesa los archivos y carpetas que le envía, o
- seleccione "Servicio" y configure "Acepta lo seleccionado" en "archivos y carpetas", que le proporcionará un elemento en el Finder Services y en el menú contextual de los archivos y carpetas (todas las traducciones son aproximadas, estoy en un sistema alemán) .
-
Agregue una acción "Ejecutar AppleScript" y edite su contenido de la siguiente manera:
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
: esto solicitará al usuario la contraseña de cifrado y la pasará como primer argumento a la siguiente acción.
-
Agregue una acción "Ejecutar Shell Script", configurándola para obtener su entrada a través de argumentos (no stdin
, como está predeterminado). Asegúrate de que la shell esté configurada en /bin/bash
. Edite el contenido del script de la siguiente manera:
[[ -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
: esto descifra y untar-gzip .encrypted
files, tar-gzip y cifra todos los demás archivos y directorios con el cifrado AES 256-CBC y la contraseña proporcionada.
Caveat Empteor: el manejo de errores es primitivo (básicamente, el bucle for
omite una iteración cuando encuentra un error), no hay registro y no hay falla contra las entradas de contraseña incorrecta (no podría querer preguntar dos veces y comparar los resultados, como lo hace la utilidad de shell). Sin embargo, no deberían ocurrir desastres, ya que los archivos solo se eliminan cuando los pasos anteriores se completan con éxito.
Finalmente, es posible que desee investigar alternativas a la solicitud de una contraseña: un archivo de contraseña en una llave USB, por ejemplo (use -pass file:/Volumes/volname/passfile
en lugar de -pass pass:$password
, omita el paso Applescript y elimine la primera línea del script de shell) ), o almacenar su contraseña en el llavero de OS X y recuperarla mediante programación (consulte esta respuesta mía en Stack Exchange para maneras de hacerlo).