¿Cómo preservar las marcas de date JPEG durante la escala de Automator?

Los services de Automator integrados como menu contextual son una excelente manera de escalar rápidamente los files JPEG en el buscador. Haga clic derecho en el file, elija su secuencia de commands de escala, hecho en segundos. El problema es que borra los sellos de date de los files , sobrescribiéndolos con la date de la operación de escalado.

¿Hay alguna manera de utilizar Automator para conservar los sellos de date durante el escalado?

  • AppleScript: ¿Cómo hacer doble clic y hacer clic con el button derecho en la location del cursor?
  • Mostrar dialog al iniciar session (script bash)
  • Error al usar "do script shell"
  • Applescript para mover files recientemente agregados (no creados o modificados) a otra carpeta?
  • Cómo optimizar mi script, un script para abrir una nueva instancia de emacs solo si no hay una instancia presente
  • ¿Hay un visor GUI de las bases de datos creadas por los events de la database?
  • Si no está en Automator, ¿hay una mejor manera de hacerlo?

    Ejemplo de servicio de escalado JPEG creado con Automator

  • El flujo de trabajo "Watch Me Do" tiene éxito en Automator, pero no como aplicación
  • ¿Mi flujo de trabajo de Automator falla porque no puede encontrar el command git dentro del command 'Ejecutar script de Shell'? Necesitas ayuda
  • ¿Cómo mostrar los files de git en Finder?
  • ¿Cómo abrir windows de nuevas carpetas en mi tamaño?
  • El flujo de trabajo de Automator solo funciona onclick en "paso"
  • ¿Se puede usar AppleScript para download files de una página web?
  • 3 Solutions collect form web for “¿Cómo preservar las marcas de date JPEG durante la escala de Automator?”

    Aquí hay una forma de lograr el objective establecido con un Servicio Automator . En lugar de utilizar Scale Images, utilice Run Shell Script con la configuration, Shell: / bin / bash y Pass input: As arguments y agregue el siguiente código :

     for f in "$@"; do # Get the creation date time stamp of the target file, saved as 't'. t="$(/usr/bin/GetFileInfo -d "$f")" # Get the pixel width of the target file and divide it by 2 for a 50% scaling, saved as 'w'. w="$(/usr/bin/sips -g pixelWidth "$f" | /usr/bin/grep pixelWidth | /usr/bin/awk '{print $2/2}')" # Scale the target file. /usr/bin/sips --resampleWidth $w "$f" # Set the modified and creation date time stamps of the target file to the saved value held in 't'. /usr/bin/SetFile -m "$t" -d "$t" "$f" done # Notify User operation is finished. /usr/bin/afplay "/System/Library/Sounds/Purr.aiff" 

    Tenga en count que la última línea del código anterior se puede omitir si va a usar la notificación Mostrar gruñido , que no tengo y por qué utilicé un sonido del sistema. Esto se hizo bajo OS X 10.8.5 y necesitará verificar que la ruta a los files ejecutables sea la misma en su sistema, aunque deberían ser los mismos. La razón por la que estoy utilizando la ruta de acceso completa de cada ejecutable es porque Automator se equivoca si no lo hago. Puede get el FQP en un Terminal usando, por ejemplo, lo which sips devuelve /usr/bin/sips .

    Tenga en count que GetFileInfo y SetFile son parte de Xcode Tools y que si no están ya instalados, necesitará instalarlos, lo que se puede activar escribiendo GetFileInfo en un Terminal y siguiendo las instrucciones.

    Puede leer las páginas del manual de cada uno de los commands utilizados para get más información a través de la comprensión de lo que está sucediendo.

    Páginas manuales para: GetFileInfo , sips y SetFile

    Servicio Automator

    El sistema de files en Mac OS X conserva 3 marcas de time separadas para los files, de la siguiente manera:

    ctime – hora de cambio (última hora de cambio del propietario del file, permissions)

    atimeatime acceso (cuando se accedió por última vez al file o contenidos)

    mtimemtime modificación (cuando los contenidos reales fueron modificados por última vez)

    Si bien estos se configuran automáticamente durante las diversas etapas de la vida útil de los files a través de la interacción normal, es importante comprender que también son modificables a cualquier valor (válido) que desee en cualquier momento. Puede sobrescribir la última hora modificada a una date anterior, si realmente tiene que hacerlo, etc., con un simple command de terminal:

     StuffeMac:~ stuffe$ touch dan.txt StuffeMac:~ stuffe$ ls -l dan.txt -rw-r--r-- 1 stuffe staff 0 3 Jan 22:30 dan.txt StuffeMac:~ stuffe$ touch -mt 201601022359 dan.txt StuffeMac:~ stuffe$ ls -l dan.txt -rw-r--r-- 1 stuffe staff 0 2 Jan 23:59 dan.txt StuffeMac:~ stuffe$ 

    Entonces, todo lo que necesita hacer es leer el time existente que desea almacenar, realizar los cambios y luego restablecer el original. Todo esto se puede hacer dentro de Automator.


    Te dejaré jugar para meter lo de abajo en Automator, ya que no tengo time, pero aquí hay una manera rápida y sucia (con muchos comentarios y comprobaciones para asegurarte de que lo entiendas y no es solo una carga de terminal) commands) para leer una timestamp, almacenarla en un file para luego, y luego volver a aplicar la misma timestamp usando la línea de command.

    Debería poder save estos como scripts cortos modificados para aceptar el nombre de file proporcionado por Automator), y luego llamarlos como acciones de Automator individuales


    Lo complicado es capturar toda la cadena de date de una vez, ya que puede ver los cambios de formatting, y pierde el time para mostrar el año de los files antiguos (y como acabamos de rodar en 2016, casi todos sus files simplemente mostrará 2015 en lugar de la timestamp si usa ls

     drwxr-xr-x+ 5 stuffe staff 170 3 May 2015 Public -rw-r--r-- 1 stuffe staff 0 2 Jan 23:59 dan.txt 

    … Así que puedes usar otros commands, como getfileinfo :

     StuffeMac-6:~ stuffe$ getfileinfo -m Public 05/03/2015 13:07:33 StuffeMac-6:~ stuffe$ getfileinfo -m dan.txt 01/02/2016 23:59:00 

    Así que sin más preámbulos, aquí hay un truco horrible que alguien puede mejorar:

    Paso 1 , lea la timestamp y guárdela en una variable, y también en un file para que podamos recuperarla más tarde

    Configura el file y dale un time de modificación más antiguo como si fuera un file antiguo, y haz una list de la hora modificada para probar:

     StuffeMac-6:~ stuffe$ touch originalfile.txt StuffeMac-6:~ stuffe$ touch -mt 201506051200 originalfile.txt StuffeMac-6:~ stuffe$ ls -l originalfile.txt -rw-r--r-- 1 stuffe staff 0 5 Jun 2015 originalfile.txt StuffeMac-6:~ stuffe$ getfileinfo -m originalfile.txt 06/05/2015 12:00:00 

    Ahora leemos la timestamp y la pasamos por un command llamado awk un par de veces para quitar el espacio en la timestamp y replacelo con dos puntos, luego usando / y : como delimitadores, imprimimos la date en el formatting que es requerido por el command táctil más tarde ( esto es un poco desagradable, pero esencialmente el primer pase sin un delimitador proporcionado usa un espacio como pnetworkingeterminado, que lo reemploop con dos puntos, para que el próximo pase que delimita específicamente : funcione correctamente – No pude conseguir que use un espacio y : y / en una pasada … – pero la legibilidad era más importante que la eficiencia ). Haga un eco de la variable para comprobar que la ha creado correctamente, y luego descárguela en un file para que la tenga luego, lea el file para comprobarlo:

     StuffeMac-6:~ stuffe$ origtimestampvariable=`getfileinfo -m originalfile.txt | awk '{print $1":"$2}'|awk -F[/:] '{print $3$2$1$4$5}'` StuffeMac-6:~ stuffe$ echo $origtimestampvariable 201505061200 StuffeMac-6:~ stuffe$ echo $origtimestampvariable > origtimestampvariable.txt StuffeMac-6:~ stuffe$ more origtimestampvariable.txt 201505061200 

    Paso 2 Ahora realiza cambios en el file

    Aquí solo añado un text, pero su Automator lo haría aquí, luego imprima los times modificados modificados para probar que cambió:

     StuffeMac-6:~ stuffe$ echo "making changes to the file now to change modified time" >> originalfile.txt StuffeMac-6:~ stuffe$ ls -l originalfile.txt -rw-r--r-- 1 stuffe staff 55 3 Jan 23:17 originalfile.txt StuffeMac-6:~ stuffe$ getfileinfo -m originalfile.txt 01/03/2016 23:17:05 

    Paso 3 Vuelve a colocar la antigua timestamp

    Ahora reinicie la timestamp modificada, utilizando el file táctil como se muestra en la parte superior de esta respuesta, pero la automation del bit donde incluimos la date para include el contenido del file ahora sabemos incluye la timestamp que necesitamos en el formatting correcto:

     StuffeMac-6:~ stuffe$ touch -mt `cat origtimestampvariable.txt` originalfile.txt 

    Algunos controles más para demostrar que la timestamp original está en su lugar:

     StuffeMac-6:~ stuffe$ ls -l originalfile.txt -rw-r--r-- 1 stuffe staff 55 6 May 2015 originalfile.txt StuffeMac-6:~ stuffe$ getfileinfo -m originalfile.txt 05/06/2015 12:00:00 

    Es posible hacer esto sin la necesidad de download Xcode

    Con el command sips en la acción " Ejecutar script de shell " para replace la acción " Escalar imágenes ".

    El script usa el command stat para get la creación y las dates de modificación del file, y el command touch para cambiar las dates del file.

    El script bash:

     for f in "$@" do newSize=$(sips -g pixelWidth -g pixelHeight "$f" | awk 'BEGIN{max=0} /pixel/{if(max<$NF){max=$NF}} END{print max/2}') if [ $newSize != "0" ]; then tDates=($(stat -f "%SB %Sm" -t "%Y%m%d%H%M.%S" "$f")) sips -Z $newSize -s formatOptions 95 "$f" && touch -t ${tDates[0]} "$f" && touch -t ${tDates[1]} "$f" fi done 

    Puede cambiar la calidad (el número after -s formatOptions ) 0-100 , el valor pnetworkingeterminado es 80 .

    100 = la mejor calidad y el file más grande, 0 = baja calidad y file más pequeño.

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).