Gibt es eine Möglichkeit zu überprüfen, ob es symbolische Links sind in ein Verzeichnis?

StackOverflow https://stackoverflow.com/questions/100170

  •  01-07-2019
  •  | 
  •  

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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top