Können Sie erkennen, ob eine Datei umbenannt wurde?

Können Sie erkennen, ob eine Datei umbenannt wurde?

Viele der verfügbaren Tools zum Synchronisieren von Dateien sind nicht für die Synchronisierung Ihres Home-Verzeichnisses geeignet. Aus diesem Grund und um Ruby zu lernen, habe ich an meinem eigenen Synchronisierungstool gearbeitet.

Ein Problem, auf das ich gestoßen bin und das meiner Meinung nach in meinen Synchronisierungstools liegt, ist, was passiert, wenn der Benutzer eine Datei umbenennt oder löscht. Wenn ich nur an den ersten Fall denke (wenn der Benutzer sie umbenennt), gibt es eine Möglichkeit, festzustellen, dass dies keine neue Datei ist, sondern eine Datei, die umbenannt wurde? Vielleicht eine eindeutige ID der Datei, die ich nicht kenne. Dateideskriptoren klingen nach etwas, das man sich genauer ansehen sollte, aber ich bin mir ziemlich sicher, dass das ein anderes Konzept ist.

Antwort1

Es gibt keine Möglichkeit, mit Sicherheit festzustellen, ob eine Datei umbenannt wurde.

Wenn eine Datei umbenannt wird,InodeNummer ändert sich nicht. (Das trifft vielleicht nicht auf „exotische“ Dateisysteme wie Netzwerkdateisysteme zu, aber auf alle „nativen“ Unix-Dateisysteme.) Das Gegenteil trifft jedoch nicht zu: Wenn eine Datei gelöscht wird, kann eine neue Datei mit derselben Inode-Nummer erstellt werden. Selbst wenn Sie also sehen, dass eine Datei dieselbe Inode-Nummer hat wie eine andere Datei zuvor, bedeutet das nicht unbedingt, dass die Datei umbenannt wurde.

Die Inode-Nummer identifiziert die Datei eindeutigsolange es existiert. Damit ist es für die Erkennung von Hardlinks geeignet, jedoch nicht für die Erkennung von Umbenennungen.

Dateideskriptoren sind einem bestimmten Prozess zugeordnet und hier nutzlos.

Sie können eine Heuristik in Betracht ziehen, die besagt, dass eine Datei umbenannt wurde, wenn sie dieselbe Größe, Änderungszeit und Inode-Nummer wie zuvor, aber einen anderen Namen hat. Diese Heuristik ähnelt der vieler Synchronisierungstools, die unveränderte Dateien erkennen: gleicher Name, gleiche Größe und Änderungszeit.

Alle Tools, die mir zum Umbenennen von Dateien einfallen und die das Verfolgen ermöglichen, tun dies auf Grundlage des Dateiinhalts.Einklangerkennt umbenannte Dateienwenn mindestens einer der Endpunkte remote ist. Einige moderne Versionskontrollsysteme wie Git erkennen auch umbenannte Dateien.

Ich vermute stark, dass was auch immer Sie mit der Dateisynchronisierung tun möchten, zwischenrsync,Einklangund Versionskontrolle, das gibt es bereits.

Antwort2

Dateideskriptoren werden für ein Programm erstellt, wenn es eine Datei öffnet, und sind nur gültig, bis das Programm sie wieder schließt. Also genau wie Sie vermutet haben: Ein anderes Konzept.

Wenn die Datei nur umbenannt wurde, ändern sich die Inodes nicht und Sie können das verwenden. Wenn Umbenennungen jedoch nicht häufig vorkommen, bezweifle ich, dass es sich lohnt.

verwandte Informationen