web-dev-qa-db-fra.com

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

J'ai un lien symbolique dans mon répertoire /var/www/ qui renvoie à WordPress. Lorsque j'exécute la commande ls -la à partir du répertoire /var/www/, 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?

129
wisaac407

Vous pouvez utiliser grep avec ls pour 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 "\->"
73
g_p

L'analyse ls est un mauvaise idée ® , préférez un simple find dans 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 que ces noms contiennent des espaces?

247
Sylvain Pineau

la commande ls -la 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 l'exécution de 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 _ PERMISSION l lors de la création d'indicateurs d'autorisation. et si vous prenez un grep avec ^l, vous 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$ 

Le pilote et le sous-système constituent un lien symbolique avec un autre répertoire.

10
αғsнιη

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 des liens dans la colonne perms à la place de l, utilisez d pour les répertoires et - pour les fichiers.

4
Kalibur

POSIXly:

find ! -name . -Prune -type l
3
cuonglm

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 l sont vos fichiers de liens symboliques.

Tapez ls -lai, il répertoriera 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.

0
saptarshi nag

Peut être fait avec 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

Cela peut être étendu pour être récursif via la fonction os.walk, 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.

0

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.

0
odoncaoa