¿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?

  • ¿Cómo puedo transmitir audio a múltiples computadoras al mismo time?
  • ¿Cómo establecer una vista de carpeta como pnetworkingeterminada para todas las carpetas en Finder?
  • Obtener la ruta actual de la aplicación Automator
  • ¿Ejecuta una secuencia de commands personalizada cuando OS X 10.8 está en Power Nap?
  • ¿Cómo eliminar una línea específica de un párrafo en AppleScript, conservando el formatting original del text?
  • Pregunta de Applescript para copyr files
  • Si no está en Automator, ¿hay una mejor manera de hacerlo?

    Ejemplo de servicio de escalado JPEG creado con Automator

  • No se pueden ingresar directorys en Finder después de mover los directorys a NAS
  • Lanzar dictado con Applescript
  • "Obteniendo ..." Comportamiento en Finder Menú "Abrir con" en Yosemite
  • ¿Se puede usar AppleScript para download files de una página web?
  • ¿Hay alguna manera de montar automáticamente el almacenamiento SMB sin la opción nobrowse?
  • La aplicación no se está ejecutando, pero Dock cree que sí, por lo que no puedo cerrarla / abrirla
  • 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).