5 votos

¿Por qué la vista previa cambia el ctime de un pdf y cómo puedo desactivarlo?

Cuando abro un archivo en Vista Previa, Vista Previa actualiza el ctime del archivo. Esto parece suceder sólo una vez, sin embargo, y por lo que yo puedo decir, nada más que el ctime está cambiando. Esto es muy frustrante porque es un lío con scripts que están comprobando si hay modificaciones en el archivo, incluso cuando no hay ninguna modificación.

A continuación se muestra un ejemplo de lo que estoy viendo. Creo un nuevo archivo pdf llamado prueba.pdf, todo se ve bien. Luego lo abro con Vista Previa, no hago nada y cierro Vista Previa. Ahora el archivo tiene un acceso actualizado y el tiempo de cambio, pero no modificado. Por lo que veo, todo lo demás del archivo es idéntico, es como si se hubiera tocado el ctime sin motivo. Este efecto parece estar almacenado en caché en algún sentido, porque si vuelvo a abrirlo, sólo se actualiza el tiempo de acceso.

$ stat -x test.pdf 
  File: "test.pdf"
  Size: 47737        FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: ~~~  Gid: ~~~
Device: 1,3   Inode: 3220039    Links: 1
Access: Wed Jun 17 11:02:24 2015
Modify: Wed Jun 17 11:02:24 2015
Change: Wed Jun 17 11:02:24 2015
$ open test.pdf 
$ stat -x test.pdf 
  File: "test.pdf"
  Size: 47737        FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: ~~~  Gid: ~~~
Device: 1,3   Inode: 3220039    Links: 1
Access: Wed Jun 17 11:02:39 2015
Modify: Wed Jun 17 11:02:24 2015
Change: Wed Jun 17 11:02:39 2015
$ open test.pdf 
$ stat -x test.pdf 
  File: "test.pdf"
  Size: 47737        FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: ~~~  Gid: ~~~
Device: 1,3   Inode: 3220039    Links: 1
Access: Wed Jun 17 11:02:53 2015
Modify: Wed Jun 17 11:02:24 2015
Change: Wed Jun 17 11:02:39 2015

¿Hay alguna forma de evitar que la vista previa haga esto, aparte de que el ingenuo copie primero el archivo y sólo mire la copia?

9voto

Oskar Puntos 1242

El sistema de archivos y los metadatos pueden cambiar cuando la vista previa tiene acceso de escritura al archivo. El porqué exacto es probablemente complicado, pero puedes evitarlo eliminando el acceso de escritura ( chmod a-w test.pdf ) y luego utilizar la vista previa en el archivo. Nota, el chmod actualiza el ctime también.


Supongo que los campos de metadatos como kMDItemUsedDates y kMDItemLastUsedDate son la razón por la que se actualiza ctime. Puede utilizar mdls test.pdf para comprobar esos datos antes y después de las pruebas.

2 votos

¿Por qué no se me ocurrió eliminar los permisos de escritura? También tenías razón sobre los metadatos. Añadió kMDItemLastUsedDate, kMDItemUseCount, y kMDItemUsedDates.

1voto

Vladimir Puntos 279

Yo también lo he notado con las imágenes. Cuando abro una en Vista Previa, le hago cambios y "fuerzo la salida" de Vista Previa, los cambios persisten aunque nunca los haya guardado. Creo que esto sucede porque Vista Previa guarda automáticamente tu trabajo sobrescribiendo el archivo original. La mayoría de los usuarios no se dan cuenta de esto porque cuando cierran el programa normalmente sin guardar, éste revierte los cambios y guarda el archivo de nuevo.

Creo que hay dos razones por las que hace esto, la primera es que como los Macs manejan muy bien los apagados y reinicios (es decir, son capaces de mantener todo tu trabajo abierto y cargarte de nuevo donde lo dejaste) entonces todos los programas hechos por Apple probablemente tienen que autoguardarse para asegurarse de que los apagados se producen lo más suavemente posible sin perder nada de nuestro trabajo.

La otra razón (en mi opinión) se debe a la forma en que los Mac muestran vistas previas del contenido de los archivos en sus iconos. Normalmente, cada vez que realizas cambios en un archivo, el icono se actualiza automáticamente para reflejar los cambios realizados. Esto se nota especialmente con las imágenes. Creo (y esto es sólo una conjetura) que la forma en que Vista Previa hace que el icono se actualice es guardando periódicamente el archivo. Esto permite al Finder manejar cualquier actualización de iconos sin necesidad de una integración especial con Vista Previa.

¿Por qué es necesario guardar el archivo inmediatamente después de abrirlo aunque no se haya realizado ningún cambio? No lo sé con seguridad, pero supongo que puede tener algo que ver con la forma en que Vista Previa maneja los archivos en la memoria: He notado que cuando haces muchos cambios a una imagen de alta resolución en Vista Previa, pierdes una cantidad notable de espacio libre en tu disco. Esto significa que Vista Previa debe almacenar parte de su memoria en disco en lugar de RAM.

Sólo una idea. No estoy seguro de si es correcto o no.

1voto

ParisYankee Puntos 11

A título informativo, el cambio de ctime quizás no esté directamente relacionado con la aplicación "Vista previa", ya que ocurre lo mismo cuando abro dos vídeos desde la línea de comandos utilizando "abrir", que luego lanza VLC para mostrarlos. Si los abro usando VLC directamente los tiempos son no cambiado. Además, si abro sólo un archivo ya sea a través de "abrir" o directamente con VLC, los tiempos son no cambiado.

Curiosamente, si uso "abrir" en archivos JPG (que abre en "Vista previa"), el efecto es el mismo que el descrito anteriormente para el archivo PDF: todos los tiempos c de los archivos se actualizan independientemente de si el comando abrió sólo uno o muchos archivos. Me pregunto por qué esto es diferente para los archivos de vídeo.

No me imagino que "Preview" utilice "open" (probablemente ambos utilicen directamente rutinas de E/S específicas de Mac de nivel inferior).

Me hago eco de la molestia del cartel original anterior. La operación de apertura parece estar jugando con los inodos de los archivos de destino. Por qué debería hacerse esto para las operaciones de sólo lectura es un misterio exclusivo de Apple. Y desafortunado.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X