# \[RESOLU\] Vérifier la validité de liens symbolique en shell

**URL:** <https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842 "2016-02-20T17:53:36Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![hasable](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/c5a1d2/32.png) [@hasable](https://www.debian-fr.org/u/hasable)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/1 "2016-02-20T17:53:36Z")

</div>

Bonjour à tous,

je vous expose mon problème.

Je dispose d’un répertoire qui a terme contiendra plusieurs dizaine de lien symbolique vers différents éléments de différents partitions. Je souhaiterai pouvoir au travers d’un script shell regarder quel est le fichier pointé et s’il existe.

Mon principale problème est d’abord de regarder quel est le fichier visé:

```auto
(server)-<user>-(/home/group/user/test) >>> ls -l
total 0
lrwxrwxrwx 1 user group 46 Jul 21 18:24 fichier 1.txt -> /home/group/user/files/fichier 1.txt
lrwxrwxrwx 1 user group 46 Jul 21 18:24 fichier 2.txt -> /home/group/user/files/fichier 2.txt
lrwxrwxrwx 1 user group 26 Jul 21 18:41 fichier 3.txt -> unFichierQuiNExistePas.txt
lrwxrwxrwx 1 user group 46 Jul 22 14:45 fichier 4.txt -> /home/group/user/files/fichier 4.txt
lrwxrwxrwx 1 user group 46 Jul 22 14:45 fichier 5.txt -> /home/group/user/files/fichier 5.txt
lrwxrwxrwx 1 user group 46 Jul 22 14:45 fichier 6.txt -> /home/group/user/files/fichier 6.txt
(server)-<user>-(/home/group/user/test) >>>
```

Je souhaiterai pouvoir récupérer juste la dernière colonne, de façon à faire un bête `[-e ${f}]` dans mon script après.

Tout ce que j’ai trouvé sur le net, c’est un truc avec awk qui donne quelque chose comme ça :

```auto

```

Effectivement ça donne bien ce que j’attends, mais serait-il possible d’avoir plutot une commande pour sélectionner la dernière colonne? Ou alors y’a-t-il un truc tout bête qui m’a échappé pour vérifier la validité d’un lien?

Merci de vos réponses.

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/2 "2016-02-20T17:53:36Z")

</div>

quote="hasable"  
serait-il possible d’avoir plutot une commande pour sélectionner la dernière colonne?  
(…)[/quote]awk est spécifiquement fait pour ça.

---

<div class="post-metadata">

**Author:** ![hasable](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/c5a1d2/32.png) [@hasable](https://www.debian-fr.org/u/hasable)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/3 "2016-02-20T17:53:36Z")

</div>

[quote=“mattotop”]quote="hasable"  
serait-il possible d’avoir plutot une commande pour sélectionner la dernière colonne?  
(…)[/quote]awk est spécifiquement fait pour ça.[/quote]

A la réflexion, non. Dans la commande que j’ai indiqué, awk affiche la 12ème colonne, ce qui au passage ne correspond pas à ce que je veux.  
(et pour afficher la dernière colonne, c’est {print $NF}, je l’ai trouvé depuis).

Le hic, c’est que s’il y’a des espaces dans les noms de fichier, c’est interprété comme 2 colonnes différentes.

Ce que je veux en fait, c’est récupérer le chemin du fichier vers lequel pointe le lien.  
Une idée?

---

<div class="post-metadata">

**Author:** ![sami\_x86](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/59ef9b/32.png) [@sami\_x86](https://www.debian-fr.org/u/sami_x86)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/4 "2016-02-20T17:53:38Z")

</div>

Bonjour,  
Avec la commande file tu as un aperçu de l’état de ton lien

```auto
$ touch fichier
$ ln -s fichier lien
$ file lien
lien: symbolic link to `fichier'
$ rm fichier
$ file lien
lien: broken symbolic link to `fichier'
```

si tu veux juste tester l’existence du fichier pointé :

```auto

```

Enfin pour avoir le juste le nom du fichier pointé… je sais pas trop…

hope it helps

---

<div class="post-metadata">

**Author:** ![hasable](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/c5a1d2/32.png) [@hasable](https://www.debian-fr.org/u/hasable)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/5 "2016-02-20T17:53:38Z")

</div>

Ben quand on sait, c’est tout de suite plus simple…

Merki!

---

<div class="post-metadata">

**Author:** ![thorgrim](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/2acd7d/32.png) [@thorgrim](https://www.debian-fr.org/u/thorgrim)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/6 "2016-02-20T17:53:38Z")

</div>

> [@](#):
>
> Enfin pour avoir le juste le nom du fichier pointé… je sais pas trop…

Moi je resterai avec awk en lui donnant comme séparateur ‘-\>’ qui t’assure que $2 sera le chemin du fichier pointé. Non ?

---

<div class="post-metadata">

**Author:** ![sami\_x86](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/59ef9b/32.png) [@sami\_x86](https://www.debian-fr.org/u/sami_x86)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/7 "2016-02-20T17:53:39Z")

</div>

[quote=“thorgrim”]  
Moi je resterai avec awk en lui donnant comme séparateur ‘-\>’ qui t’assure que $2 sera le chemin du fichier pointé. Non ?[/quote]

sauf si le fichier pointé contient -\> dans son nom… ui je sais c’est un peu tordu quand même… 😕

---

<div class="post-metadata">

**Author:** ![thorgrim](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/2acd7d/32.png) [@thorgrim](https://www.debian-fr.org/u/thorgrim)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/8 "2016-02-20T17:53:40Z")

</div>

> [@](#):
>
> sauf si le fichier pointé contient -\> dans son nom… ui je sais c’est un peu tordu quand même… 😕

On a le droit d’avoir ça dans un nom de fichier ? Il me semble pas, mais je peux me tromper 🙂

---

<div class="post-metadata">

**Author:** ![hasable](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/c5a1d2/32.png) [@hasable](https://www.debian-fr.org/u/hasable)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/9 "2016-02-20T17:53:41Z")

</div>

Hum …

```auto
(server)-<user>-(/home/group/user/test/MVE) >>> touch fichier-\>test.txt
(server)-<user>-(/home/group/user/test/MVE) >>> ls
fichier 1.txt fichier 3.txt fichier 5.txt fichier- test.txt
fichier 2.txt fichier 4.txt fichier 6.txt fichier->test.txt
(server)-<user>-(/home/group/user/test/MVE) >>>
```

On peut, on peut…

Pas familier de awk : quelqu’un peut m’indiquer comment on spécifie le séparateur?

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/10 "2016-02-20T17:53:42Z")

</div>

L’option -F (fais man awk pour plus d’info).

Sed ça rox :

`ll testlink | sed -e 's/^.* -> \(.*\)$/\1/'
../test`  
Oui ça foire sur si tu as un lien qui s’appelle “toto -\>”. Mais j’ai pas bien foutu la regexp tu peut l’améliorer.

Édition :  
Un peu lourd dans la forme mais ça marche à tout les fichiers (quoique si tu met un ’ ou un ` ça foire aussi) :

```auto

```

---

<div class="post-metadata">

**Author:** ![hasable](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/c5a1d2/32.png) [@hasable](https://www.debian-fr.org/u/hasable)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/11 "2016-02-20T17:53:42Z")

</div>

On dit pas “lourd” dans ce cas là, on dit “violent”.  
(je sais : les puristes me diront "mais non! c’est rien ça!)

Je vais voir ce que donne vos solutions et jeter un coup d’œil dans les manuels pour voir ce qui m’arrange le mieux.

Merci.

Edit: je vais surement me contenter de mettre " -\> " comme séparateur dans awk. C’est possible le mettre dans le nom de fichier, mais faut admettre que c’est qd même pas courant!!! Charge aux utilisateurs de ne pas faire n’importe quoi non plus.

---

<div class="post-metadata">

**Author:** ![tntprog](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/eada6e/32.png) [@tntprog](https://www.debian-fr.org/u/tntprog)\
**Post date:** [Février 20, 2016, 5:53 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/12 "2016-02-20T17:53:55Z")

</div>

[quote=“hasable”]On dit pas “lourd” dans ce cas là, on dit “violent”.  
(je sais : les puristes me diront "mais non! c’est rien ça!)

Je vais voir ce que donne vos solutions et jeter un coup d’œil dans les manuels pour voir ce qui m’arrange le mieux.

Merci.

Edit: je vais surement me contenter de mettre " -\> " comme séparateur dans awk. C’est possible le mettre dans le nom de fichier, mais faut admettre que c’est qd même pas courant!!! Charge aux utilisateurs de ne pas faire n’importe quoi non plus.[/quote]  
Suffit de tester si le tout premier caractère de la ligne est un “l” quand tu fais un “ls” 😉

---

<div class="post-metadata">

**Author:** ![hasable](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/c5a1d2/32.png) [@hasable](https://www.debian-fr.org/u/hasable)\
**Post date:** [Février 20, 2016, 5:54 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/13 "2016-02-20T17:54:11Z")

</div>

[quote=“tntprog”]  
Suffit de tester si le tout premier caractère de la ligne est un “l” quand tu fais un “ls” 😉[/quote]

non. Ca me dira juste que le fichier est un lien, mais pas vers quoi il pointe.

---

<div class="post-metadata">

**Author:** ![ripat](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/bc79bd/32.png) [@ripat](https://www.debian-fr.org/u/ripat)\
**Post date:** [Février 20, 2016, 5:54 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/14 "2016-02-20T17:54:12Z")

</div>

Sinon, il y avait ceci:

```auto

```

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 5:54 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/15 "2016-02-20T17:54:12Z")

</div>

> [@](#):
>
> [quote=“sami\_x86”]sauf si le fichier pointé contient -\> dans son nom… ui je sais c’est un peu tordu quand même… 😕

On a le droit d’avoir ça dans un nom de fichier ? Il me semble pas, mais je peux me tromper 🙂[/quote]`roc@roc:~/tmp$ touch "test->truc"
roc@roc:~/tmp$ ll
total 0
-rw-r--r-- 1 roc roc 0 jui 24 12:08 test->truc
roc@roc:~/tmp$ ln -s truc test
roc@roc:~/tmp$ ll
total 0
lrwxrwxrwx 1 roc roc 4 jui 24 12:08 test -> truc
-rw-r--r-- 1 roc roc 0 jui 24 12:08 test->truc
roc@roc:~/tmp$ touch "test -> truc"
roc@roc:~/tmp$ ll
total 0
lrwxrwxrwx 1 roc roc 4 jui 24 12:08 test -> truc
-rw-r--r-- 1 roc roc 0 jui 24 12:09 test -> truc
-rw-r--r-- 1 roc roc 0 jui 24 12:08 test->truc
`On peut, mais c’est confusionnant tout de même. ![:smt005](https://www.debian-fr.org/uploads/default/original/1X/cdd45e7dd754015ac5291329b843a2851a0d4fe8.gif)

---

<div class="post-metadata">

**Author:** ![pascal50](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/ac91a4/32.png) [@pascal50](https://www.debian-fr.org/u/pascal50)\
**Post date:** [Février 20, 2016, 5:54 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/16 "2016-02-20T17:54:13Z")

</div>

Trouvez le lien :

`poste02 liens # ls -l
total 0
-rw-r--r-- 1 root root 0 jui 24 12:30 .............
lrwxrwxrwx 1 root root 12 jui 24 12:34 truc -> test -> test -> truc
`

---

<div class="post-metadata">

**Author:** ![tntprog](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/eada6e/32.png) [@tntprog](https://www.debian-fr.org/u/tntprog)\
**Post date:** [Février 20, 2016, 5:54 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/17 "2016-02-20T17:54:14Z")

</div>

[quote=“hasable”][quote=“tntprog”]  
Suffit de tester si le tout premier caractère de la ligne est un “l” quand tu fais un “ls” 😉[/quote]

non. Ca me dira juste que le fichier est un lien, mais pas vers quoi il pointe.[/quote]  
En associant à ce que tu avais fais précédemment, si.

[quote=“pascal50”]Trouvez le lien :

`poste02 liens # ls -l
total 0
-rw-r--r-- 1 root root 0 jui 24 12:30 .............
lrwxrwxrwx 1 root root 12 jui 24 12:34 truc -> test -> test -> truc
`[/quote]  
Là par contre… 😕

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 5:54 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/18 "2016-02-20T17:54:15Z")

</div>

[quote=“ripat”]Sinon, il y avait ceci:

`find /ton/repertoire/ -type l -exec [! -e {}] \; -print`[/quote]Ca, ça me parait raisonnable, comme approche.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 5:54 UTC](https://www.debian-fr.org/t/resolu-verifier-la-validite-de-liens-symbolique-en-shell/14842/19 "2016-02-20T17:54:27Z")

</div>

Tester l’existence d’un lien symbolique c’est tester l’existence de sa cible ? Pas mal.
