Tengo un script bash que funciona como un hilo. Ahora me gustaría convertirlo en un servicio con Automator.
La entrada se establece en Archivos de imagen en Automator y la acción del script de shell se establece en Pass input as arguments
.
Automator discrepa con dos cosas:
Sin embargo, no aparece ningún error en el registro y el resultado del script de shell está vacío:
(
""
)
La función createDatePath
comprueba si la imagen pasada tiene el mismo formato 2020-08-10-demo_image.jpg
y crea una carpeta YEAR/MONTH/
en el directorio de destino. La condición if realiza acciones en la entrada dependiendo de si es un JPEG o PNG, y si la cadena de fecha va seguida de una -qq-
cadena. Esta es una versión recortada del script (tengo algunas más condiciones, pero supongo que no las necesitamos aquí).
backup=/Users/me/Desktop/A/backup/
targetPath=/Users/me/Desktop/A/output/
function createDatePath {
[[ "$i" =~ ^([0-9]{4})-([0-9]{2}) ]] && \
mkdir -p "$targetPath${BASH_REMATCH[1]}/${BASH_REMATCH[2]}";
}
for i in "$@"; do
cp "$i" "$backup"
if [[ "$i" =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})-([^q]{2}).+\.((jpg)|(jpeg))$ ]]; then
createDatePath;
else
exit 0;
fi
done
Captura de pantalla:
Enlace para completar el script de shell: https://gist.github.com/pattulus/a89be63478174853d667
Si alguien pudiera explicarme por qué esto no funciona y cómo hacer que funcione, sería genial.
PD: en el script que no es de Automator, lo primero que hice fue cd
ingresar a la ruta de origen, pero como esto terminará como un servicio que toma archivos como entrada, supongo que puedo omitir esto (agregar no sirvió de cd "$@"
nada ).
Los argumentos que Automator pasa al script son rutas absolutas. Puede convertirlos en nombres base con algo como i=${i##*/}
.
sin ladera
Patricio