Perché cambiare "Apri con" cambia anche un file "Data di modifica"?

4

Qualcosa che ho notato qualche tempo fa. Uso Carbon Copy Cloner per il backup dei miei file e ho notato un giorno in cui ho cambiato il flag "Apri con" di un video per aprire sempre un file video con Movist anziché Quicktime, e la volta successiva che il clone lo ha eseguito ha copiato nuovamente il file. Anche se nulla è cambiato. Il che mi ha fatto capire che OS X cambia una data di modifica dei file causando programmi di backup come Rsync (che CCC e SuperDuper usano) e Time Machine per ricopiare il file, anche se ha una dimensione di 10 GB.

Perché lo fa? C'è una ragione tecnica o è una svista? Mi sembra un'idea sciocca. Soprattutto dal momento che la modifica di un'etichetta non modifica il file e la selezione del colore viene duplicata senza che l'intero file venga copiato.

    
posta Jason Anderson 27.11.2010 - 01:55
fonte

2 risposte

5

Alcuni esperimenti utilizzando il comando xattr mostrano questo:

  • Le informazioni sull'etichetta sono memorizzate nell'attributo esteso di com.apple.FinderInfo , che ogni file dovrebbe avere per impostazione predefinita.
  • Le associazioni di applicazioni personalizzate sono memorizzate nell'attributo com.apple.ResourceFork , che non tutti i file hanno.
  • L'aggiornamento dell'attributo FinderInfo non causa la modifica della data.
  • La creazione / aggiornamento di ResourceFork comporta la modifica della data.

La fork delle risorse storicamente aveva un posto speciale nei file system Mac. Non sono sicuro che l'attributo esteso di com.apple.ResourceFork sia uguale a un fork di risorse , se quest'ultimo è stato sostituito dal primo o in che modo sono collegati.

Se c'è una differenza tecnica tra un attributo esteso e un fork delle risorse , potrebbe essere "necessario" per un file da modificare quando il fork delle risorse viene aggiornato, ma non quando viene scritto l'attributo esteso.
È possibile che l'API (legacy) per l'aggiornamento dei fork delle risorse aggiorni la data di modifica del file nel processo, mentre l'API dell'attributo esteso non lo fa. Quest'ultimo è probabilmente in errore, probabilmente a causa di diverse filosofie.

Informazioni vaghe, ma potrebbe dare un po 'più di intuizione. Alla fine però hai ragione. Alcune modifiche alle meta informazioni causano l'aggiornamento della data di modifica, altre no. Se c'è una ragione dietro questa o se è solo una svista ... solo alcuni ragazzi di Apple potrebbero saperlo. :)

    
risposta data 27.11.2010 - 04:03
fonte
2

Quando selezioni un singolo file, apri una finestra Ottieni informazioni e scegli un'applicazione diversa e non predefinita, questa associazione di Servizi di avvio viene salvata nel fork delle risorse del file stesso, in 'usro' (Ignora utente) risorsa. Per quanto ne so, il formato di questa risorsa è privato, determinato da Apple, ed è soggetto a modifiche. (Tutti i caratteri minuscoli nel nome OSType forniscono un indizio, poiché Apple riserva il tipo di file, i codici autore e i tipi di risorse con tutti i caratteri minuscoli. Per esempio, 'icns' (Icon Suite) tipo di risorsa, 'ttxt' (originariamente da Teach Text , ma ora è il codice creatore (CFBundleSignature) di TextEdit.app), ecc.).

Questa risorsa viene creata utilizzando le funzioni di Gestione risorse per modificare il fork del file, che a sua volta aggiorna la data di modifica del file.

Un file di esempio su cui ho appena provato questa procedura è mostrato nell'immagine qui sotto, aperto in Resorcerer. (Nota speciale: noterai nella colonna di sinistra che ci sono 2 tipi elencati: 'TEXT' e 'usro' . In effetti c'è solo una singola voce 'usro' , Resorcerer sta mostrando che c'è una voce di risorsa 'TEXT' perché nota che il contenuto nel fork dei dati del file è basato su testo (un file di intestazione del codice sorgente) e pertanto fornisce un comodo accesso ad esso). La seconda immagine mostra il contenuto di questa risorsa, che in pratica contiene un percorso per l'applicazione di destinazione che ho scelto.

Poiché questa risorsa di sovrascrittura utente 'usro' viene salvata come parte del file stesso, ciò spiega perché Guida alla programmazione dei servizi di lancio: la scelta della preferenza di rilegatura per un file afferma quanto segue:

Note: Explicit binding preferences for individual items are not user-specific but systemwide—that is, they continue to apply to the given item on that same computer, even if a different user logs in.

Ora, per fare un passo avanti. Se fai clic sul pulsante Change All per fare in modo che questo sia un override globale, Launch Services rimuoverà la voce 'usro' resource e creerà invece un binding globale che è memorizzato in com.apple.LaunchServices.plist (preferenze per utente) file. La rimozione della voce 'usro' viene eseguita utilizzando le funzioni di Gestione risorse, che aggiorneranno la data di modifica del file. Si noti che mentre rimuove la risorsa 'usro' , potrebbe non eliminare l'intero fork delle risorse. Nella maggior parte dei casi, restano 286 byte nel fork delle risorse, che in pratica è la quantità minima di spazio occupata dall'intestazione della risorsa e dalla mappa delle risorse.

    
risposta data 05.01.2011 - 23:50
fonte

Leggi altre domande sui tag