Bei Serverfehler Wie symbolische Linkketten aufgelistet werden? (nicht meine Frage) spricht darüber, alle symbolischen Links aufzulisten und ihnen zu folgen. Um dies möglich zu machen, betrachten wir zuerst ein einzelnes Verzeichnis.
Ich möchte ein kurzes Programm schreiben, das das tut. Es scheint einfach zu sein, Paare aus symbolischen Links in einen Hash zu setzen und dann den Hash zu verarbeiten.
Aber dann könnte ich etwas wie:
haben %Vor% wo es offensichtlich ist, dass a->b->c
eine Schleife ist und diese Falle in eine Schleife zeigt, aber um x
Punkte in einer Schleife zu kennen, muss ich ein bisschen folgen.
Eine Hash-Darstellung ist:
%Vor%Aber die umgekehrte Darstellung ist besser, um Schleifen zu schlechten Startpunkten zu machen, sobald ich weiß, was die Schleifen sind.
Hier sind einige Fragen:
Es gibt ein Diagramm -Modul in CPAN, das Sie wie folgt verwenden könnten:
%Vor%Beispiel: In einem Verzeichnis, das der Struktur in Ihrer Frage ähnelt, ist die Ausgabe
%Vor%Sehen Sie sich das CPAN-Modul File :: Spec :: Link an. Die resolve-Methode besagt, dass sie wiederholt eine Verknüpfung durchläuft, um das verknüpfte Ziel zu finden.
Die resolve Methode des Moduls sagt folgendes:
auflösen ($ link)
Gibt die Nicht-Verknüpfung zurück, die letztendlich mit $ link verknüpft ist, indem wiederholt Linked aufgerufen wird. Gibt undef zurück, wenn der Link nicht aufgelöst werden kann.
Ich hatte dieses Modul benutzt, um ein Ziel der symbolischen Verbindung zu finden, dessen Ziel wiederum ein Symlink war und so weiter. Aber ich bin mir nicht sicher, ob dies die zyklischen symbolischen Links erkennt.
Sie müssen mehr als nur den Namen des Links speichern. Nehmen Sie entweder die Inode-Nummer (wenn Ihr FS dies unterstützt) oder einen anderen einzigartigen Aspekt. Wenn es eines nicht gibt, dann überlegen Sie sich Ihr eigenes zu erstellen, vielleicht indem Sie den Namen / create / last-modified Datum checksummieren. In jedem Fall benötigen Sie eine Möglichkeit, um jeden Link eindeutig zu identifizieren. Ich habe einige Utilities gesehen, die die Anzahl der Links (zwischen 8 und 255) begrenzen und alles, was diese Grenze überschreitet, als Schleife deklarieren, aber ich habe das immer als "den billigen Ausweg" betrachtet. :)
Tags und Links perl tree infinite-loop filesystems cpan