Ich möchte einen beschädigten Symlink in einem Verzeichnis mit Perl entfernen.
In meinen Gedanken musste ich nur die Datei eines Verzeichnisses auflisten und testen, ob das ein Symlink (-l) ist und wenn es false zurückgibt, einfach die Verknüpfung aufheben.
Aber wenn ich readir benutze, um alle Dateien aufzulisten, werden meine fehlerhaften symbolischen Links nicht als Datei reorganisiert. Da mein Link auf nichts zeigt, verstehe ich warum.
Dann : Wie kann ich erkennen, ob ein Symlink in Perl unterbrochen ist?
Danke,
AKTUALISIEREN
Alle Dateien in $ myDir sind symbolische Links, entweder gültig oder fehlerhaft. Wenn ich @files anzeige, erhalte ich nur eine Liste von gültigen Symlinks.
%Vor% Es gibt zwei wichtige relevante Systemaufrufe: stat()
und lstat()
. Der Aufruf lstat()
sagt Ihnen, dass es sich um einen Symlink handelt (bei anderen Dateien verhält er sich jedoch genauso wie stat()
). Dadurch können Sie feststellen, dass der Name ein Symlink ist. Der Systemaufruf stat()
folgt einem Symlink bis zum Ende und teilt Ihnen die Datei (oder das Verzeichnis) am Ende des Links mit. Wenn der Aufruf stat()
auf dem Symlink fehlschlägt, ist der Symlink unterbrochen oder Sie versuchen, auf ein Verzeichnis oder eine Datei zuzugreifen, für die Sie keine Berechtigung haben.
Die Perl Dateitest -Operatoren enthalten -l
, um festzustellen, ob ein Name ein Symlink ist. Sie können die Perl-Funktionen stat
und lstat
explizit. Dazwischen sollten Sie in der Lage sein, herauszufinden, ob ein Symlink kaputt ist oder nicht - aber Sie sollten wahrscheinlich planen, eine Funktion zu schreiben, um den Job zu erledigen.
Sie müssen wahrscheinlich die readlink
Perl-Funktion nicht verwenden. Achten Sie auf das zugrunde liegende System readlink()
Aufruf; es gibt keine nullterminierte Zeichenfolge zurück!
Es ist interessant, dass weder Perl noch sein POSIX-Modul die Funktion realpath()
unterstützt. Das Modul PathTools unterstützt dies jedoch. Wenn realpath
fehlschlägt, ist der Symlink in einem Symlink nicht funktionsfähig (aka broken).