Warum ändert die Vorschau die ctime einer PDF-Datei und wie kann ich sie deaktivieren?

Wenn ich eine Datei in der Vorschau öffne, aktualisiert die Vorschau die ctime der Datei. Dies scheint jedoch nur einmal zu passieren, und soweit ich das beurteilen kann, ändert sich nichts anderes als die ctime. Das ist sehr frustrierend, weil es mit Skripten herumspielt, die nach Änderungen an der Datei suchen, selbst wenn keine Änderung stattfindet.

Unten ist ein Beispiel für das, was ich sehe. Ich erstelle eine neue PDF-Datei namens test.pdf, alles sieht gut aus. Dann öffne ich es mit Vorschau, mache nichts und schließe die Vorschau. Jetzt hat die Datei eine aktualisierte Zugriffs- und Änderungszeit, aber keine Änderung. Soweit ich das beurteilen kann, ist alles andere an der Datei identisch, es ist, als ob die ctime ohne Grund berührt wurde. Dieser Effekt scheint in gewisser Weise zwischengespeichert zu sein, denn wenn ich ihn erneut öffne, wird nur die Zugriffszeit aktualisiert.

$ 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

Gibt es eine Möglichkeit, dies in der Vorschau zu verhindern, außer die Datei zuerst naiv zu kopieren und sich nur die Kopie anzusehen?

Antworten (3)

Das Dateisystem und die Metadaten können sich ändern, wenn die Vorschau Schreibzugriff auf die Datei hat. Das genaue Warum ist wahrscheinlich kompliziert, aber Sie können es verhindern, indem Sie den Schreibzugriff ( chmod a-w test.pdf) entfernen und dann die Vorschau für die Datei verwenden. Beachten Sie, dass chmod auch die ctime aktualisiert.


Ich vermute, dass Metadatenfelder wie kMDItemUsedDates und kMDItemLastUsedDate der Grund für die Aktualisierung von ctime sind. Mit können Sie mdls test.pdfdiese Details vor und nach Ihren Tests überprüfen.

Warum habe ich nicht daran gedacht, Schreibrechte zu entfernen! Auch bei den Metadaten hattest du recht. Es fügte kMDItemLastUsedDate, kMDItemUseCount und kMDItemUsedDates hinzu.

Bei Bildern ist mir das auch schon aufgefallen. Wenn ich eine in der Vorschau öffne, Änderungen daran vornehme und die Vorschau "beendet" erzwinge, bleiben die Änderungen bestehen, obwohl ich sie nie gespeichert habe. Ich glaube, das passiert, weil die Vorschau Ihre Arbeit automatisch speichert, indem die Originaldatei überschrieben wird. Die meisten Benutzer bemerken dies nicht, denn wenn sie das Programm normal schließen, ohne zu speichern, werden die Änderungen rückgängig gemacht und die Datei erneut gespeichert.

Ich denke, es gibt zwei Gründe dafür, der erste ist, dass, da Macs sehr gut mit dem Herunterfahren und Neustarten umgehen (dh in der Lage sind, Ihre gesamte Arbeit offen zu halten und Sie direkt wieder dorthin zu laden, wo Sie aufgehört haben), dann wahrscheinlich alle von Apple erstellten Programme müssen automatisch speichern, um sicherzustellen, dass das Herunterfahren so reibungslos wie möglich abläuft, ohne dass etwas von unserer Arbeit verloren geht.

Der andere Grund (meiner Meinung nach) liegt in der Art und Weise, wie Macs Vorschauen von Dateiinhalten in ihren Symbolen anzeigen. Normalerweise wird das Symbol automatisch aktualisiert, wenn Sie Änderungen an einer Datei vornehmen, um die von Ihnen vorgenommenen Änderungen widerzuspiegeln. Das macht sich besonders bei Bildern bemerkbar. Ich denke (und das ist nur eine wilde Vermutung), dass die Vorschau die Symbolaktualisierung durch regelmäßiges Speichern der Datei vornimmt. Auf diese Weise kann der Finder alle erforderlichen Symbolaktualisierungen selbst durchführen, ohne dass eine spezielle Integration mit der Vorschau erforderlich ist.

Warum muss die Datei sofort beim Öffnen gespeichert werden, obwohl keine Änderungen vorgenommen wurden? Ich weiß es nicht genau, aber ich würde vermuten, dass es etwas damit zu tun haben könnte, wie die Vorschau Dateien im Speicher verarbeitet: Ich habe festgestellt, dass Sie, wenn Sie viele Änderungen an einem hochauflösenden Bild in der Vorschau vornehmen, tatsächlich eine verlieren merklich viel freien Speicherplatz auf Ihrer Festplatte. Das bedeutet, dass Preview einen Teil seines Arbeitsspeichers auf der Festplatte statt im RAM speichern muss.

Nur ein Gedanke. Nicht sicher, ob es richtig ist oder nicht.

Zur Information, die Ctime-Änderung steht möglicherweise nicht in direktem Zusammenhang mit der Anwendung „Vorschau“, da dasselbe passiert, wenn ich zwei Videos von der Befehlszeile aus mit „Öffnen“ öffne, wodurch VLC gestartet wird, um sie anzuzeigen. Wenn ich sie direkt mit VLC öffne, werden die ctimes nicht geändert. Auch wenn ich nur eine Datei öffne entweder über "Öffnen" oder direkt mit VLC, werden die Zeiten nicht verändert.

Seltsamerweise ist der Effekt derselbe wie oben für die PDF-Datei beschrieben, wenn ich "Öffnen" für JPG-Dateien verwende (die in "Vorschau" geöffnet werden): Alle Ctimes der Dateien werden aktualisiert, unabhängig davon, ob der Befehl nur eine geöffnet hat oder viele Dateien. Ich frage mich, warum das bei Videodateien anders ist.

Ich kann mir nicht vorstellen, dass "Preview" "open" verwendet (beide verwenden wahrscheinlich direkt Mac-spezifische E / A-Routinen auf niedrigerer Ebene).

Ich wiederhole den Ärger des ursprünglichen Posters oben. Die Öffnungsoperation scheint mit den Inodes der Zieldateien herumzuspielen. Warum dies für schreibgeschützte Operationen getan werden sollte, ist ein reines Apple-Mysterium. Und schade.