So listen Sie alle symbolischen Links in einem Verzeichnis auf

96

Ich habe einen symbolischen Link in meinem /var/www/ -Verzeichnis, das auf WordPress verweist. Wenn ich den Befehl ls -la aus dem Verzeichnis /var/www/ starte, wird der Link zu WordPress nicht angezeigt. Gibt es eine Möglichkeit, alle symbolischen Links in einem Verzeichnis aufzulisten?

    
wisaac407 09.09.2014, 19:56
quelle

8 Antworten

57

Sie können den Befehl grep mit ls verwenden, um alle symbolischen Links im aktuellen Verzeichnis aufzulisten.

Dies listet alle Links auf, die im aktuellen Verzeichnis vorhanden sind.

ls -la /var/www/ | grep "\->"
    
g_p 09.09.2014, 20:02
quelle
182

Das Parsen von ls ist eine Schlechte Idee ® , bevorzugen Sie eine einfache find Fall:

find . -type l -ls

Um nur das aktuelle Verzeichnis zu bearbeiten:

find . -maxdepth 1 -type l -ls

Danksagungen: Wie mache ich die Shell die Dateinamen erkennen, die von einem 'ls -A' Befehl zurückgegeben werden, und diese Namen Leerzeichen enthalten?

    
Sylvain Pineau 09.09.2014 20:21
quelle
8

Der Befehl ls -la zeigt alle Dateien und Ordner sowie symbolisch verknüpfte Verzeichnisse an. Wenn dieser Befehl kein symbolisches Verzeichnis anzeigt, bedeutet dies, dass Sie keine symbolische Verbindung zu WordPress .

Siehe das Ergebnis von ls -la :

kasiya@kasiya-pc:~$ cd /sys/devices/platform/sony-laptop
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la
total 0
drwxr-xr-x  3 root root    0 Sep  9 19:57 .
drwxr-xr-x 14 root root    0 Sep 10  2014 ..
-r--r--r--  1 root root 4096 Sep  9 22:32 battery_care_health
-rw-r--r--  1 root root 4096 Sep  9 22:32 battery_care_limiter
lrwxrwxrwx  1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
-r--r--r--  1 root root 4096 Sep  9 22:32 modalias
drwxr-xr-x  2 root root    0 Sep  9 22:32 power
lrwxrwxrwx  1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
-rw-r--r--  1 root root 4096 Sep  9 22:32 touchpad
-rw-r--r--  1 root root 4096 Sep  9 19:57 uevent

Sie sehen, dass alle symbolischen Verzeichnisse die Berechtigung l bei den Flags für die Berechtigungserstellung haben. und wenn du ein grep mit ^l nimmst, kannst du nur symbolische Dateien oder Verzeichnisse auflisten:

kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la |grep ^l
lrwxrwxrwx 1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
lrwxrwxrwx 1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ 

Treiber und Subsystem Verzeichnis sind symbolische Verknüpfungen zu anderen Verzeichnissen hier.

    
αғsнιη 09.09.2014 20:32
quelle
3

POSIXly:

find ! -name . -prune -type l
    
cuonglm 09.09.2014 20:24
quelle
3

grep ist dein Freund:

ls -lhaF | grep ^l   # list links
ls -lhaF | grep ^d   # list directories
ls -lhaF | grep ^-   # list files

Damit werden Zeilen beginnend mit "l" aufgelistet, die Links in der Spalte "Dauer" darstellen, anstelle von l use d für Verzeichnisse und - für Dateien

    
Kalibur 08.10.2015 12:22
quelle
0

Geben Sie ls -lai ein, es listet alle Dateien und Unterverzeichnisse mit entsprechenden Inode-Nummern auf. Sie wissen, dass Dateien mit derselben Inode-Nummer die Links (hart oder weich) sind und diese Lösung auch für symbolische Links funktioniert.

    
saptarshi nag 09.09.2014 20:18
quelle
0

Um die symbolischen Links in einem Verzeichnis anzuzeigen:

  1. Öffnen Sie ein Terminal und wechseln Sie in dieses Verzeichnis.

  2. Geben Sie den folgenden Befehl ein:

    ls -la
    

    Dies soll lange alle Dateien in dem Verzeichnis auflisten, auch wenn sie versteckt sind.

  3. Die Dateien, die mit l beginnen, sind Ihre symbolischen Verknüpfungsdateien.

quelle
0

Kann auch mit Python gemacht werden:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /path/to/dir

Beispiellauf:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /etc
/etc/vtrgb
/etc/printcap
/etc/resolv.conf
/etc/os-release
/etc/mtab
/etc/localtime

Dies kann erweitert werden, um über os.walk function rekursiv zu sein, aber es ist ausreichend, eine einfache Listengenerierung zu verwenden, um Links in einem einzelnen Verzeichnis aufzulisten, wie ich oben gezeigt habe.

    
Sergiy Kolodyazhnyy 09.01.2017 12:15
quelle