it-swarm.com.de

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

Ich habe einen Ordner auf meinem Server, auf den ich eine Reihe symbolischer Links verweise. Ich habe seitdem einen neuen Ordner erstellt und möchte alle diese symbolischen Links so ändern, dass sie auf den neuen Ordner verweisen. Ich hatte überlegt, den ursprünglichen Ordner durch einen Symlink zum neuen Ordner zu ersetzen, aber es scheint, dass es sehr schnell sehr chaotisch werden könnte, wenn ich mit dieser Übung fortfahre.

Ich habe die Symlinks manuell geändert, um auf den neuen Ordner zu verweisen, aber möglicherweise habe ich ein paar verpasst.

Gibt es eine Möglichkeit, zu überprüfen, ob Symlinks auf einen bestimmten Ordner verweisen?

60
nickf

Ich würde den Befehl find verwenden.

find . -lname /particular/folder

Dadurch wird das aktuelle Verzeichnis rekursiv nach Symlinks zu /particular/folder Durchsucht. Beachten Sie, dass nur absolute Symlinks gefunden werden. Ein ähnlicher Befehl kann verwendet werden, um nach allen Symlinks zu suchen, die auf Objekte mit dem Namen "folder" zeigen:

find . -lname '*folder'

Von dort müssten Sie alle falschen Positiven ausmerzen.

77
skymt

Sie können Symlinks mit dem symlinks -Programm prüfen, das von Mark Lord geschrieben wurde. Es scannt ein gesamtes Dateisystem, normalisiert Symlink-Pfade auf absolute Form und druckt sie auf stdout aus.

7
JJK

Es gibt keine direkte Möglichkeit, nach solchen Symlinks zu suchen. Bedenken Sie, dass Sie möglicherweise ein Dateisystem haben, das nicht ständig gemountet ist (z. B. ein externes USB-Laufwerk), das Symlinks zu einem anderen Volume im System enthalten kann.

Du könntest etwas machen mit:

for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder

Ich stelle fest, dass FreeBSDs find die Option -lname Nicht unterstützt.

5
Greg Hewgill
find . -type l -printf '%p -> %l\n'
3
no1uknow

Abgesehen von der Ansicht aller anderen Ordner, wenn Links auf den ursprünglichen Ordner verweisen, denke ich nicht, dass dies möglich ist. Wenn ja, wäre ich interessiert.

2
stephanea
find / -lname 'fullyqualifiedpathoffile'
1
bfabry

Für Hardlinks können Sie die Inode Ihres Verzeichnisses mit einer der "ls" -Optionen (-i, Meiner Ansicht nach).

Dann ein find mit -inum findet alle gängigen Hardlinks.

Für Softlinks müssen Sie möglicherweise ein ls -l für alle Dateien, die nach "->" nach dem Text suchen und ihn normalisieren, um sicherzustellen, dass es sich um einen absoluten Pfad handelt.

1
paxdiablo
find /foldername -type l -exec ls -lad {} \;
1
Lunar Mushrooms