Antes de continuar, permíteme disculparme: sé que has expresado una ligera preferencia por Javascript sobre AppleScript. Sin embargo, mi Javascript es un pantalón, mientras que ya sé cómo lograrlo usando este último, y definitivamente proporciona una manera de obtener los datos de la imagen desde el portapapeles directamente desde la línea de comandos.
La siguiente línea (repartida en cuatro líneas para facilitar la lectura) tomará la imagen del portapapeles y la guardará en un archivo con el nombre de la fecha y la hora actuales, ubicado en su directorio de trabajo actual:
osascript -e "tell application \"System Events\" to ¬
write (the clipboard as JPEG picture) to ¬
(make new file at folder \"$(pwd)\" with properties ¬
{name:\"$(date +%Y-%m-%d\ at\ %H.%M.%S).jpg\"})"
Si decide utilizar este método mío, le sugiero que cree un alias/función para envolverlo, que luego puede llamar simplemente escribiendo el nombre de la función +/- un parámetro si quiere especificar el nombre del archivo manualmente (con un pequeño ajuste en la parte final del comando anterior donde se declara el nombre del archivo).
EDITAR: Me adelanté y escribí un shell script que hace todo esto por ti:
#!/bin/bash
# Filename: SaveMyScreenshot (executable)
# Author: CK 2017
# ----------------------------------------------------
# Takes a screenshot to the clipboard then saves the
# clipboard image to a file in jpeg format.
#
# Usage: SaveMyScreenshot [[path/]filename]
#
# If no filename is specified, the image will be saved
# to the present working directory and named using the
# current date and time. If more than one argument is
# given, all but the first argument are ignored.
#
# e.g.
#
# SaveMyScreenshot
#
# SaveMyScreenshot ~/Desktop
#
# SaveMyScreenshot ~/Desktop/foo.jpg
# ----------------------------------------------------
screencapture -c
folder=$(pwd)
filename=$(date +%Y-%m-%d\ at\ %H.%M.%S).jpg
if [ $# -ne 0 ]; then
if [[ -d $1 ]]; then
if [ "$1" != "." ]; then folder=$1; fi
else
a=$(dirname "$1")
b=$(basename "$1" .jpg)
if [ "$b" != "" ]; then filename=$b.jpg; fi
if [ "$a" != "." ]; then folder=$a; fi
fi
fi
osascript -e "tell application \"System Events\" to ¬
write (the clipboard as JPEG picture) to ¬
(make new file at folder \"$folder\" ¬
with properties {name:\"$filename\"})"
Esto puede ser copiado y pegado en un archivo de texto plano llamado "SaveMyScreenshot", hecho ejecutable ejecutando el comando chmod +x /path/to/SaveMyScreenshot
en Terminal y luego se trasladó a uno de los directorios especificados en $PATH
(Yo uso /usr/local/bin ).
A partir de ese momento, basta con escribir SaveMyScreenshot
como lo haría con cualquier otro comando en Terminal .
P.D. No olvides comentar o borrar la línea del script que hace la captura de pantalla ( screencapture -c
). Creo que usted tiene su propio método preferido para obtener su captura de pantalla, y sólo puse esto para mis propios fines de prueba y para completar en caso de que alguien más pueda encontrar esta respuesta útil en un contexto más general.