968 votes

Comment obtenir le chemin complet d'un fichier ?

Existe-t-il un moyen simple d'imprimer le chemin complet de file.txt ?

file.txt = /nfs/an/disks/jj/home/dir/file.txt

En <command>

dir> <command> file.txt  

doit imprimer

/nfs/an/disks/jj/home/dir/file.txt

1575voto

filmor Points 7439

Utilisation lien de lecture :

readlink -f file.txt

0 votes

Je suppose que cela ne fonctionne que pour les liens symboliques.<br>Utilisation : readlink FICHIER Si FICHIER existe et est un lien symbolique, afficher le contenu du lien et quitter avec succès. Sinon, il n'affiche rien et échoue. --help affiche cette aide et quitte --version affiche les informations sur la version et quitte

13 votes

2 votes

Sur mas osx il retourne que -f est illégal et a proposé d'utiliser -n à la place mais n'a rien retourné.

94voto

ZeRemz Points 551

La méthode suivante fait généralement l'affaire :

 echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")"

0 votes

Bonjour. J'ai trouvé cette réponse qui correspond le mieux à mon besoin. Comment puis-je utiliser une variable locale au lieu d'un paramètre de ligne de commande (c'est-à-dire $1) ?

1 votes

LOCAL_VARIABLE="filename.txt" && echo $(cd $(dirname "$LOCAL_VARIABLE") && pwd -P)/$(basename "$LOCAL_VARIABLE")

10 votes

@SopalajodeArrierez Parce que readlink ne fonctionne pas si le fichier est un lien symbolique, il vous montrera la cible du lien symbolique au lieu du lien lui-même.

49voto

jcomeau_ictx Points 15736

I savoir il y a un moyen plus simple, mais je ne peux pas le trouver...

jcomeau@intrepid:~$ python -c 'import os; print(os.path.abspath("cat.wav"))'
/home/jcomeau/cat.wav

jcomeau@intrepid:~$ ls $PWD/cat.wav
/home/jcomeau/cat.wav

0 votes

J'aime beaucoup la créativité de cette solution :)

36voto

Anshul Gupta Points 41
find $PWD -type f | grep "filename"

ou

find $PWD -type f -name "*filename*"

1 votes

Pour moi, sur mac, cela a fonctionné - au lieu de $pwd - find `pwd` -type file -name \*.dmp

0 votes

Merci ! Cela m'a incité à utiliser une méthode plus simple find $PWD cela fonctionne parfaitement pour moi lorsqu'il ne s'agit que de quelques fichiers

2voto

Ackq Points 1

Dans un scénario similaire, je lance un cshell script à partir d'un autre endroit. Pour définir le chemin absolu correct du script afin qu'il s'exécute uniquement dans le répertoire désigné, j'utilise le code suivant :

set script_dir = `pwd`/`dirname $0`

$0 stocke la chaîne exacte de la façon dont le script a été exécuté.

Par exemple, si le script était lancé comme ceci : $> ../../test/test.csh , $script_dir contiendra /home/abc/sandbox/v1/../../test

0 votes

J'ai voté pour ce point car c'est le plus simple et le plus pertinent. Cependant, si vous tapez ./test.csh vous obtiendrez un chemin se terminant par /test/.

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