Pour ce que cela vaut, j'ai voté pour la réponse qui a été choisie, mais je voulais partager une solution. L'inconvénient est qu'elle ne concerne que Linux - j'ai passé environ 5 minutes à essayer de trouver l'équivalent pour OSX avant de tomber sur Stack Overflow. Je suis sûr qu'il existe.
Sous Linux, vous pouvez utiliser readlink -e
en tandem avec dirname
.
$(dirname $(readlink -e ../../../../etc/passwd))
rendements
/etc/
Ensuite, vous utilisez dirname
La sœur de M, basename
pour obtenir le nom du fichier
$(basename ../../../../../passwd)
rendements
passwd
Tout est réuni
F=../../../../../etc/passwd
echo "$(dirname $(readlink -e $F))/$(basename $F)"
rendements
/etc/passwd
Vous ne risquez rien si vous ciblez un répertoire, basename
ne renvoie rien et vous vous retrouverez avec des doubles barres obliques dans le résultat final.