cmpxat, comprueba que dos archivos son exactamente iguales vía xattrs

Tienes dos archivos, que dicen ser idénticos. ¿Cómo puedes comprobar si realmente lo son?

En macOS, y varios otros sistemas operativos, en HFS+ y APFS en particular, los archivos no sólo tienen su contenido de datos regular, sino también atributos extendidos. Las herramientas de comando como cmp revisarán cada byte de sus datos, pero ignorarán completamente esos atributos extendidos (xattrs).

No era realmente un gran problema en el pasado: aunque siempre ha habido formas de copiar archivos que también ignoran los xattrs, si usas el Finder y otras formas de nivel superior de copiar archivos, sin importar a dónde fueran, siempre y cuando estuvieran en un sistema de archivos “seguro” como HFS+, sus xattrs iban en silencio con ellos.

Esto ha cambiado ahora que la mayoría de nosotros hacemos un uso extensivo del almacenamiento remoto, la nube, y específicamente iCloud. Aunque aparentemente no está documentado en ninguna parte, iCloud elimina silenciosamente la mayoría de los xattrs cuando se utilicen para mover archivos entre ordenadores, incluso si ambos son Mac, ejecutando la misma versión de macOS, y con almacenamiento local HFS+ o APFS. Por otro lado, Time Machine y todos los mejores sistemas de copia de seguridad conservan los xattrs.

Entonces, ¿cómo puede comprobar si una copia de un archivo en su unidad iCloud, o en una copia de seguridad, es exactamente la misma, con los mismos xattrs?

La única respuesta que he podido encontrar es “con dificultad”, aunque me encantaría oír algo fiable y sencillo. Este fue el tema de una pregunta en StackExchange, y la mejor respuesta parece ser hackearlo usando rsync, lo cual es francamente extraño.

Sin embargo, si recurres a macOS FileManager, podría pensar que ahí radica la solución:

FileManager.contentsEqual(atPath: String, andPath: String)

parece que puede hacer el trabajo. Sólo que su documentación no menciona xattrs, así que hay que remitirse a su código fuente, donde se dice claramente que no se tienen en cuenta los xattrs.

Puedes hacer esto a ojo con la herramienta GUI xattred, pero actualmente no hace la comparación por ti, y es inútil incluso para hacer comprobaciones al azar en una muestra de archivos supuestamente idénticos. Es una característica que se está añadiendo a xattred, pero una herramienta de comando básica similar a cmp es lo que se necesita primero.

Aquí está: la primera versión de cmpxat. Se ejecuta en el modo más básico de cmp – sólo hay que darle las rutas a los dos archivos de la siguiente manera

cmpxat archivo1 archivo2

Si no devuelve ninguna salida, entonces son idénticos con respecto a sus xattrs. Si hay alguna diferencia entre sus xattrs, te dirá de qué manera son diferentes, como por ejemplo si falta uno o más archivos o si su contenido no es idéntico.

cmpxat está disponible desde aquí: cmpxat1

Vía: The Eclectic Light Company

 

0 0 votos
Article Rating
Subscribe
Notify of
1 Comment
Oldest
Newest Most Voted
Opiniones Inline
Ver todos los comentarios
sault
5 years ago

Bueno

1
0
Me encantaría saber tu opinión, por favor, deja un comentariox
()
x