So listen Sie alle symbolischen Links in einem Verzeichnis auf

145

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

Isaac
quelle

Antworten:

80

grepMit dem lsBefehl können Sie alle im aktuellen Verzeichnis vorhandenen symbolischen Links auflisten.

Dadurch werden alle im aktuellen Verzeichnis vorhandenen Links aufgelistet.

ls -la /var/www/ | grep "\->"
g_p
quelle
5
Es wird falsch positiv zurückgegeben, wenn Sie eine Datei haben, die " ->" enthält. Versuchen Sie es einfachtouch "foo->"
Sylvain Pineau
7
Bitte kopieren Sie den Inhalt einer anderen Antwort nicht und fügen Sie ihn nicht in Ihre eigene Antwort ein. -1
αғsнιη
3
Warum nicht grepmitmachen ^l?
Eliran Malka
3
Wie immer ist die beste Antwort die mit dem höchsten +
FractalSpace
Nett! → .bash_alias: alias listlinks='ls -l --color | grep "\->"'8-)
Frank Nocke
284

Parsing lsist eine schlechte Idee ® , bevorzugen Sie findin diesem Fall eine einfache :

find . -type l -ls

So verarbeiten Sie nur das aktuelle Verzeichnis:

find . -maxdepth 1 -type l -ls

Credits: Wie kann ich die Shell so konfigurieren, dass die von einem ls -A -Befehl zurückgegebenen Dateinamen erkannt werden und diese Namen Leerzeichen enthalten?

Sylvain Pineau
quelle
find: Unknown argument to -type: 1
Ahnbizcad
15
@ahnbizcad: Es ist nicht 1(eine), sondern l(Link)
Sylvain Pineau
3
Gute Antwort! Ich habe meinen so angepasst, dass er nicht den Verzeichnispfad herunterfährt: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Danke!
bgs
3
Nur für das aktuelle Verzeichnis (dh nicht rekursiv ) hinzufügen -maxdepth 1.
Joshua Pinter
1
@ cig0 Sie müssen nicht verwenden awk, und möchten wahrscheinlich nur dies:find . -maxdepth 1 -type l | sort -n
sobi3ch
10

Der ls -laBefehl zeigt alle Dateien und Ordner sowie das symbolisch verknüpfte Verzeichnis an. Wenn dieser Befehl kein symbolisches Verzeichnis anzeigt, bedeutet dies, dass Sie keinen symbolischen Link zu WordPress haben .

Sehen Sie das Ergebnis des Laufens 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 werden sehen, dass alle symbolischen Verzeichnisse lbeim Aufrufen der Berechtigungsflags die Berechtigung haben. und wenn Sie ein grep mitnehmen ^l, können Sie 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 Subsystemverzeichnis sind hier symbolische Verknüpfungen zu anderen Verzeichnissen.

αғsнιη
quelle
1
Kleinere Angaben hier ... Das erste Zeichen der Berechtigungszeichenfolge ist eigentlich keine Berechtigung. Es ist der Dateityp. Wie Sie angegeben haben l, handelt es sich um einen symbolischen Link.
conner.xyz
5

grep ist dein Freund:

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

Dies listet Zeilen auf, die mit "l" beginnen und Verknüpfungen in der Spalte "perms" anstelle der lVerwendung dfür Verzeichnisse und -für Dateien darstellen

Kalibur
quelle
3

POSIXly:

find ! -name . -prune -type l
cuonglm
quelle
1

So zeigen Sie die symbolischen Links in einem Verzeichnis an:

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

  2. Geben Sie den Befehl ein:

    ls -la
    

    Dadurch werden alle Dateien im Verzeichnis aufgelistet, auch wenn sie ausgeblendet sind.

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

Sandeep Srivastav Vaddiparthy
quelle
1
-1: Die Antwort von KasiyA deckt dies bereits ab.
muru
1

Dies gibt alle symbolisch verknüpften Elemente (sowohl dirs als auch fns) in einem Verzeichnis zurück:

find . -maxdepth 1 -type l -print | cut -c3- | grep -v "\#"

Um jedoch zwischen tatsächlichen symbolisch verknüpften Artikeltypen zu unterscheiden:

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep -v "/" | cut -d' ' -f1

Gibt nur symbolisch verknüpfte Dateinamenelemente zurück. Und,

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep "/" | cut -d' ' -f1

Gibt nur symbolisch verknüpfte Verzeichniseinträge zurück.

odoncaoa
quelle
0

Typ ls -lai, es listet alle Dateien und Unterverzeichnisse mit entsprechenden inode numbers.You wissen Dateien mit gleichen Inode - Nummer sind die Links (hart oder weich) und diese Lösung funktioniert auch für die symbolischen Links.

saptarshi nag
quelle
ls -laizeigt nicht dieselbe Inode-Nummer für eine Datei und ihre symbolischen Verknüpfungen an. Im Gegensatz zu festen Links haben symbolische Links eigene Inode-Einträge. So sieht es aus.
Eliah Kagan
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

Probelauf:

$ 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 über die os.walkFunktion rekursiv erweitert werden , aber es reicht aus, eine einfache Listengenerierung zum Auflisten von Links in einem einzelnen Verzeichnis zu verwenden, wie oben gezeigt.

Sergiy Kolodyazhnyy
quelle