it-swarm.com.de

Wie finde ich alle Symlinks in einem Verzeichnisbaum?

Ich versuche, alle Symlinks in einem Verzeichnisbaum für meine Website zu finden. Ich weiß, dass ich find verwenden kann, aber ich kann nicht herausfinden, wie ich die Verzeichnisse rekursiv überprüfe.

Ich habe diesen Befehl ausprobiert:

find /var/www/ -type l

… Und später entdeckte ich, dass der Inhalt in /var/www sind Symlinks, daher habe ich den Befehl folgendermaßen geändert:

find -L /var/www/ -type l

es dauert eine Weile, bis ich renne, aber ich bekomme keine Treffer.

Wie kann ich damit Unterverzeichnisse überprüfen?

215
hafichuk

Dies durchläuft rekursiv das Verzeichnis /path/to/folder Und listet nur die symbolischen Links auf:

ls -lR /path/to/folder | grep ^l

Wenn Sie auch den symbolischen Links folgen möchten, sollten Sie den Befehl find verwenden, aber die Option -L Einfügen. Tatsächlich heißt es auf der Manpage find:

   -L     Follow symbolic links.  When find examines or prints information
          about files, the information used shall be taken from the  prop‐
          erties  of  the file to which the link points, not from the link
          itself (unless it is a broken symbolic link or find is unable to
          examine  the file to which the link points).  Use of this option
          implies -noleaf.  If you later use the -P option,  -noleaf  will
          still  be  in  effect.   If -L is in effect and find discovers a
          symbolic link to a subdirectory during its search, the subdirec‐
          tory pointed to by the symbolic link will be searched.

          When the -L option is in effect, the -type predicate will always
          match against the type of the file that a symbolic  link  points
          to rather than the link itself (unless the symbolic link is bro‐
          ken).  Using -L causes the -lname and -ilname predicates  always
          to return false.

Dann versuchen Sie folgendes:

find -L /var/www/ -type l

Dies wird wahrscheinlich funktionieren: Ich habe in der Manpage find diesen Diamanten gefunden: Wenn Sie die Option -type Verwenden, müssen Sie sie in die Option -xtype Ändern:

          l      symbolic link; this is never true if the -L option or the
                 -follow option is in effect, unless the symbolic link  is
                 broken.  If you want to search for symbolic links when -L
                 is in effect, use -xtype.

Dann:

find -L /var/www/ -xtype l
267
ztank1013

Ein Befehl, keine Pfeifen

find . -type l -ls

Erklärung: find ab dem aktuellen Verzeichnis . Alle Referenzen von -type l Ink und list -ls Die im Detail. Schlicht und einfach...

Um diese Antwort zu erweitern, hier ein paar weitere symbolische Verknüpfungsbefehle zu find:

Finden Sie symbolische Links zu einem bestimmten Ziel

find . -lname link_target

Beachten Sie, dass link_target Ein Muster ist, das Platzhalterzeichen enthalten kann.

Finden Sie defekte symbolische Links

find -L . -type l -ls

Die Option -L Weist find an, symbolischen Links zu folgen, sofern diese nicht beschädigt sind.

Finden und ersetzen Sie defekte symbolische Links

find -L . -type l -delete -exec ln -s new_target {} \;

Mehr Beispiele finden

Weitere find Beispiele finden Sie hier: https://hamwaves.com/find/

191

find sieht standardmäßig bereits rekursiv aus:

[15:21:53 ~]$ mkdir foo
[15:22:28 ~]$ cd foo
[15:22:31 ~/foo]$ mkdir bar
[15:22:35 ~/foo]$ cd bar
[15:22:36 ~/foo/bar]$ ln -s ../foo abc
[15:22:40 ~/foo/bar]$ cd ..
[15:22:47 ~/foo]$ ln -s foo abc
[15:22:52 ~/foo]$ find ./ -type l
.//abc
.//bar/abc
[15:22:57 ~/foo]$ 
9
jman

Um nur die Symlinks selbst zu sehen, können Sie verwenden

find -L /path/to/dir/ -xtype l 

wenn Sie jedoch auch sehen möchten, auf welche Dateien sie abzielen, fügen Sie einfach ein ls an

find -L /path/to/dir/ -xtype l -exec ls -al {} \;
7
MariusPontmercy

Dies ist das Beste, was ich bisher gefunden habe - zeigt Ihnen die Symlinks im aktuellen Verzeichnis rekursiv, aber ohne ihnen zu folgen, mit vollständigen Pfaden und anderen Informationen:

find ./ -type l -print0 | xargs -0 ls -plah

ausgaben sieht ungefähr so ​​aus:

lrwxrwxrwx 1 Apache develop 99 Dec  5 12:49 ./dir/dir2/symlink1 -> /dir3/symlinkTarget
lrwxrwxrwx 1 Apache develop 81 Jan 10 14:02 ./dir1/dir2/dir4/symlink2 -> /dir5/whatever/symlink2Target
etc...
4
siliconrockstar

Ich erstelle ein Skript in meinem bin-Verzeichnis, das einem Alias ​​ähnelt. Zum Beispiel habe ich ein Skript mit dem Namen lsd ls -l | grep ^ d

du könntest einen lsl ls -lR | machen grep ^ l

Chmod sie einfach + x und du bist gut zu gehen.

0
Alex M