¿Por qué cambiar "Abrir con" también cambia los archivos "Fecha de modificación"?

4

Algo que noté hace un rato. Utilizo Carbon Copy Cloner para hacer una copia de seguridad de mis archivos y noté que un día cambié la marca "Abrir con" de un video para abrir siempre un archivo de video con Movist en lugar de Quicktime, y la próxima vez que el clon lo ejecutó, copió el archivo nuevamente. Aunque nada haya cambiado. Lo que me hizo darme cuenta de que OS X cambia la fecha de modificación de los archivos, lo que provoca que los programas de copia de seguridad como Rsync (que utilizan CCC y SuperDuper) y Time Machine vuelvan a copiar el archivo, incluso si tiene un tamaño de 10 GB.

¿Por qué hace esto? ¿Hay una razón técnica o es un descuido? Me parece una idea tonta. Sobre todo porque cambiar una etiqueta no modifica el archivo y la selección de color se duplica sin que se copie todo el archivo.

    
pregunta Jason Anderson 27.11.2010 - 01:55

2 respuestas

5

Algunos experimentos con el comando xattr muestran esto:

  • La información de la etiqueta se almacena en el atributo extendido com.apple.FinderInfo , que cada archivo debería tener de forma predeterminada.
  • Las asociaciones de aplicaciones personalizadas se almacenan en el atributo com.apple.ResourceFork , que no tienen todos los archivos.
  • La actualización del atributo FinderInfo no hace que se modifique la fecha de modificación.
  • La creación / actualización de ResourceFork hace que se modifique la fecha de modificación.

Históricamente, la bifurcación de recursos tenía un lugar especial en los sistemas de archivos Mac. No estoy seguro de si el com.apple.ResourceFork atributo extendido es lo mismo que un tenedor de recursos , si este último fue reemplazado por el primero o cómo están conectados.

Si hay una diferencia técnica entre un atributo extendido y bifurcación de recursos , puede ser "necesario" que un archivo se modifique cuando se actualice la bifurcación de recursos. pero no cuando se escribe el atributo extendido.
Puede ser que la API (heredada) para actualizar las bifurcaciones de recursos actualice la fecha de modificación del archivo en el proceso, mientras que la API de atributo extendido no. Este último posiblemente en error, posiblemente debido a diferentes filosofías.

Información vaga, pero puede dar un poco más de información. Al final, aunque tienes razón. Algunas modificaciones de metainformaciones hacen que la fecha de modificación se actualice, otras no. Si hay una razón detrás de esto o si es solo un descuido ... solo unos pocos tipos de Apple pueden saberlo. :)

    
respondido por el deceze 27.11.2010 - 04:03
2

Cuando selecciona un solo archivo, abre una ventana Obtener información y elige una aplicación diferente, no predeterminada, este enlace de Servicios de lanzamiento se guarda en la bifurcación de recursos del archivo, en un 'usro' (Anulación del usuario) recurso. Por lo que sé, el formato de este recurso es privado, determinado por Apple, y está sujeto a cambios. (Todos los caracteres en minúscula en el nombre OSType proporcionan una pista, ya que Apple reserva el tipo de archivo, los códigos del creador y los tipos de recursos con todos los caracteres en minúscula. Por ejemplo, el tipo de recurso 'icns' (Icon Suite), 'ttxt' (originalmente de Teach Text , pero ahora es el código creador (CFBundleSignature) de TextEdit.app), etc.).

Este recurso se crea mediante las funciones del Administrador de recursos para modificar la bifurcación del archivo, que a su vez actualiza la fecha de modificación del archivo.

Un archivo de ejemplo en el que acabo de probar este procedimiento se muestra en la imagen a continuación, abierta en Resorcerer. (Nota especial: en la columna de la izquierda notará que hay 2 tipos enumerados: 'TEXT' y 'usro' . De hecho, solo hay una entrada 'usro' ; Resorcerer muestra que hay una entrada de recurso 'TEXT' porque se da cuenta de que el contenido de la bifurcación de datos del archivo está basado en texto (un archivo de encabezado de código fuente) y, por lo tanto, proporciona un acceso conveniente a él. La segunda imagen muestra el contenido de este recurso, que básicamente contiene una ruta a la aplicación de destino que elegí.

Dado que este recurso de anulación de usuario 'usro' se guarda como parte del archivo, eso explica por qué Guía de programación de servicios de lanzamiento: elegir la preferencia de enlace para un archivo afirma lo siguiente:

  

Nota: las preferencias de enlace explícito para elementos individuales no son específicas del usuario, sino de todo el sistema, es decir, continúan aplicándose al elemento dado en esa misma computadora, incluso si un usuario diferente inicia sesión.

Ahora, para ir un paso más allá. Si ahora hace clic en el botón Change All para hacer de esto una anulación global, Launch Services eliminará la entrada de recurso 'usro' y en su lugar creará un enlace global que se almacena en com.apple.LaunchServices.plist (preferencias por usuario) expediente. La eliminación de la entrada 'usro' se realiza mediante las funciones de Resource Manager, que actualizarán la fecha de modificación del archivo. Tenga en cuenta que si bien elimina el recurso 'usro' , es posible que no elimine toda la bifurcación de recursos. En la mayoría de los casos, 286 bytes permanecerán en la bifurcación de recursos, que es básicamente la cantidad mínima de espacio ocupado por el encabezado de recursos y el mapa de recursos.

    
respondido por el NSGod 05.01.2011 - 23:50

Lea otras preguntas en las etiquetas