Comment lister tous les liens symboliques d'un répertoire

145

J'ai un lien symbolique dans mon /var/www/répertoire qui renvoie à WordPress. Lorsque j'exécute la commande à ls -lapartir du /var/www/répertoire, le lien vers WordPress n'apparaît pas. Existe-t-il un moyen de répertorier tous les liens symboliques contenus dans un répertoire?

Isaac
la source

Réponses:

80

Vous pouvez utiliser la commande grepwith lspour répertorier tous les liens symboliques présents dans le répertoire en cours.

Ceci listera tous les liens présents dans le répertoire courant.

ls -la /var/www/ | grep "\->"
g_p
la source
5
Il retournera un faux positif si vous avez un fichier contenant " ->". Essayez un simpletouch "foo->"
Sylvain Pineau
7
veuillez ne pas copier / coller le contenu d'une autre réponse à votre propre réponse. -1
αғsнιη
3
pourquoi ne pas greping avec ^l?
Eliran Malka
3
Comme d'habitude, la meilleure réponse est celle qui a le plus haut +
FractalSpace
Agréable! → .bash_alias: alias listlinks='ls -l --color | grep "\->"'8-)
Frank Nocke
285

L'analyse syntaxique lsest une mauvaise idée ® , préférez un simple finddans ce cas:

find . -type l -ls

Pour traiter uniquement le répertoire actuel:

find . -maxdepth 1 -type l -ls

Crédits: Comment faire en sorte que le shell reconnaisse les noms de fichiers renvoyés par une commande `ls -A`, et ces noms contiennent des espaces?

Sylvain Pineau
la source
find: Unknown argument to -type: 1
ahnbizcad
15
@ahnbizcad: Ce n'est pas 1(un) mais l(lien)
Sylvain Pineau
3
Très bonne réponse! J'ai ajusté le mien pour ne pas descendre le chemin du répertoire comme ceci: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Merci!
bgs
3
Pour seulement le répertoire courant (c'est-à-dire non récursif ), ajoutez -maxdepth 1.
Joshua Pinter
1
@ cig0 u n'avez pas besoin d'utiliser awk, vous voulez probablement juste ceci:find . -maxdepth 1 -type l | sort -n
sobi3ch
10

la ls -lacommande affiche tous les fichiers et dossiers, ainsi que le répertoire lié symbolique. Si cette commande n’affiche aucun répertoire symbolique, cela signifie que vous n’avez pas de lien symbolique vers WordPress .

voir le résultat de la course 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

Vous verrez que tous les répertoires symboliques ont des lautorisations au début des drapeaux d’autorisations. et si vous prenez un grep avec ^lvous ne pouvez lister que les fichiers ou répertoires symboliques:

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$ 

répertoire driver et subsystem sont des liens symboliques vers d’autres répertoires ici.

αғsнιη
la source
1
Spécification mineure ici ... le premier caractère de la chaîne d'autorisations n'est pas vraiment une autorisation. C'est le type de fichier. Comme vous l'avez dit l, cela signifie que c'est un lien symbolique.
conner.xyz
5

grep est votre ami:

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

Ceci listera les lignes commençant par "l" qui représentent les liens dans la colonne perms au lieu de l’ lutiliser dpour les répertoires et les -fichiers

Kalibur
la source
3

POSIXly:

find ! -name . -prune -type l
cuonglm
la source
1

Pour afficher les liens symboliques dans un répertoire:

  1. Ouvrez un terminal et accédez à ce répertoire.

  2. Tapez la commande:

    ls -la
    

    Cela doit faire la liste de tous les fichiers du répertoire même s'ils sont cachés.

  3. Les fichiers qui commencent par lsont vos fichiers de liens symboliques.

sandeep srivastav vaddiparthy
la source
1
-1: La réponse de KasiyA couvre déjà cela.
muru
1

Ceci renvoie tous les éléments liés symboliquement (les deux dirs & fns) dans un répertoire:

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

Cependant, afin de distinguer les types d’éléments liés symboliquement:

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

Renvoie uniquement les éléments de nom de fichier liés symboliquement. Et,

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

Renvoie uniquement les éléments dirname liés symboliquement.

Odoncaoa
la source
0

Tapez ls -lai, il listera tous les fichiers et sous-répertoires avec les numéros d'inode correspondants. Vous savez que les fichiers avec le même numéro d'inode sont les liens (durs ou logiciels) et cette solution fonctionne également pour les liens symboliques.

saptarshi nag
la source
ls -laine montre pas le même numéro d'inode pour un fichier et ses liens symboliques. Contrairement aux liens physiques, les liens symboliques ont leurs propres entrées inode distinctes. Voici à quoi ça ressemble.
Eliah Kagan
0

Peut être fait avec du python aussi:

$ 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

Échantillon échantillon:

$ 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

Ceci peut être étendu pour être récursif via une os.walkfonction, mais il suffit d’utiliser une simple génération de liste pour lister les liens dans un seul répertoire, comme je l’ai montré ci-dessus.

Sergiy Kolodyazhnyy
la source