Antes de continuar, permítame disculparme: sé que expresó una ligera preferencia por Javascript sobre AppleScript. Sin embargo, mi Javascript es pantalón, aunque ya sé cómo hacerlo utilizando este último, y definitivamente proporciona una forma de obtener datos de imágenes desde el portapapeles directamente desde la línea de comandos.
La siguiente frase (repartida en cuatro líneas solo para facilitar la lectura) tomará la imagen del portapapeles y la guardará en un archivo con el nombre establecido como fecha y hora actual, 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 elige usar este método mío, sugiero crear un alias / función para envolverlo dentro, al que puede llamar simplemente escribiendo el nombre de la función +/- un parámetro si desea especificar el nombre de archivo manualmente (con un pequeño ajuste a la parte final del comando anterior donde se declara el nombre de archivo).
EDITAR: Seguí adelante y escribí un script de shell 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 se puede copiar y pegar en un archivo de texto plano llamado "SaveMyScreenshot", ejecutable ejecutando el comando chmod +x /path/to/SaveMyScreenshot
en Terminal , y luego moviéndolo a uno de los directorios especificados en $PATH
(Yo uso / usr / local / bin ).
A partir de entonces, simplemente puede escribir SaveMyScreenshot
como lo haría con cualquier otro comando en Terminal .
P.S. No olvide comentar o eliminar la línea en el script que toma la captura de pantalla ( screencapture -c
). Creo que tiene su propio método preferido para obtener su captura de pantalla, y solo lo puse para mis propios fines de prueba y para que esté completo en caso de que alguien más encuentre útil esta respuesta en un contexto más general.