233 votes

Comment récupérer un chemin absolu à partir d'un chemin relatif

Existe-t-il une commande permettant de récupérer le chemin absolu à partir d'un chemin relatif ?

Par exemple, je veux que $line contienne le chemin absolu de chaque fichier dans le répertoire ./etc/

find ./ -type f | while read line; do
   echo $line
done

263voto

user2075062 Points 81

Essayer realpath .

~ $ sudo apt-get install realpath  # may already be installed
~ $ realpath .bashrc
/home/username/.bashrc

Pour éviter de développer les liens symboliques, utilisez realpath -s .

La réponse vient de " Commande bash/fish pour imprimer le chemin absolu d'un fichier ".

146voto

Moritz Bunkus Points 7445

Si vous avez installé le paquetage coreutils, vous pouvez généralement utiliser readlink -f relative_file_name afin de récupérer la version absolue (avec tous les liens symboliques résolus)

115voto

Eugen Konkov Points 5218
#! /bin/sh
echo "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")"

UPD Quelques explications

  1. Ce script reçoit le chemin relatif comme argument "$1"
  2. On obtient alors nom du répertoire de ce chemin (vous pouvez passer soit dir soit file à ce script) : dirname "$1"
  3. Ensuite, nous cd "$(dirname "$1") dans ce répertoire relatif et obtenir le chemin absolu en exécutant pwd commande shell
  4. Ensuite, nous ajoutons nom de base au chemin absolu : $(basename "$1")
  5. La dernière étape consiste à echo il

83voto

mpapis Points 32015

Utiliser :

find "$(pwd)"/ -type f

pour obtenir tous les fichiers ou

echo "$(pwd)/$line"

pour afficher le chemin d'accès complet (si le chemin d'accès relatif est important)

38voto

synthesizerpatel Points 9762

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X