Gibt es eine Möglichkeit zu überprüfen, ob es symbolische Links sind in ein Verzeichnis?
Frage
Ich habe einen Ordner auf meinem Server, zu dem ich eine Reihe von symbolischen Links zeigen hatte. Ich habe einen neuen Ordner erstellt, da und ich möchte alle diese symbolischen Links in den neuen Ordner Punkt ändern. Ich hatte als den ursprünglichen Ordner mit einem Symlink in die neuen Ordner zu ersetzen, aber es scheint, dass, wenn ich mit dieser Praxis fortgesetzt könnte es sehr schnell sehr chaotisch.
Was ich getan habe manuell, um die Symlinks Wechsel auf den neuen Ordner zu zeigen, aber ich kann ein paar verpasst haben.
Gibt es eine Möglichkeit zu überprüfen, ob es irgendwelche symbolischen Links verweisen auf einen bestimmten Ordner?
Lösung
Ich würde den Befehl find verwenden.
find . -lname /particular/folder
Das wird rekursiv das aktuelle Verzeichnis für Symlinks Suche nach /particular/folder
. Beachten Sie, dass es nur absolute symbolische Links finden. Ein ähnlicher Befehl kann verwendet werden für alle Symlinks zeigen auf Objekte genannt suchen „Ordner“:
find . -lname '*folder'
Von dort würden Sie brauchen keine falschen Positive auszusondern.
Andere Tipps
Sie können prüfen Symlinks mit das symlinks
Programm von Mark Herrn geschrieben - es wird ein gesamtes Dateisystem scannen, symlink Pfade absolute Form normalisieren und sie zu stdout drucken.
Es gibt wirklich keine direkte Möglichkeit für eine solche symbolische Links zu überprüfen. Bedenken Sie, dass Sie vielleicht ein Dateisystem, das nicht die ganze Zeit montiert ist (z. B. ein externes USB-Laufwerk), die symbolischen Links auf einem anderen Datenträger auf dem System enthalten könnte.
Sie könnten etwas mit:
for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder
Ich nehme zur Kenntnis, dass FreeBSD find
nicht die -lname
Option nicht unterstützt, weshalb ich mit dem oben gelandet ist.
find . -type l -printf '%p -> %l\n'
Neben auf allen anderen Ordnern suchen, wenn es Links sind in den ursprünglichen Ordner, ich glaube nicht, es ist möglich. Wenn ja, würde mich interessieren.
find / -lname 'fullyqualifiedpathoffile'
find /foldername -type l -exec ls -lad {} \;
Für harte Links können Sie die Inode Ihres Verzeichnisses mit einem der „ls“ Optionen erhalten (-i
, glaube ich).
Dann wird ein find
mit -inum
werden alle gängigen Hardlinks finden.
Für Softlinks, müssen Sie unter Umständen eine ls -l
auf alle Dateien tun für den Text suchen nach „->“. Und Normalisierung der es um sicherzustellen, dass es ist ein absoluter Pfad