40 votes

Comment obtenir le chemin complet d'un fichier en bash ?

Je voudrais un moyen facile d'obtenir le chemin complet d'un fichier. Actuellement, je tape ceci :

echo `pwd`/file.ext

Pour essayer de le raccourcir, j'ai créé un alias bash :

alias fp='echo `pwd`/'

Mais maintenant, si je tape fp file.ext il y a un espace qui apparaît entre le / et le file.ext .

Est-ce qu'une telle commande existe déjà et que je l'ai ratée ? Si non, comment puis-je créer un tel alias ou une telle fonction dans bash ?

57voto

Keith Sirmons Points 2558

Sur les systèmes linux, vous devez avoir readlink du projet GNU coreutils installé et peut faire cela :

readlink -f file.ext

Les systèmes Debian/ubuntu peuvent avoir le chemin réel installé qui "fournit essentiellement les mêmes fonctionnalités que l'utilitaire /bin/readlink -f dans le paquet coreutils".

10voto

Au lieu de la pwd utilisez la commande PWD (c'est aussi dans POSIX) :

fp () {
  case "$1" in
    /*) printf '%s\n' "$1";;
    *) printf '%s\n' "$PWD/$1";;
  esac
}

Si vous devez prendre en charge Windows, la reconnaissance des chemins absolus sera plus compliquée car chaque portage d'outils Unix a ses propres règles pour traduire les chemins de fichiers. Avec Cygwin, utilisez la fonction cygpath utilitaire.

8voto

cYrus Points 20338

Vous pouvez utiliser :

realpath file.ext

7voto

En https://stackoverflow.com/a/3915420/5795941

C'est la seule façon qui soit acceptable pour moi. Elle ne développe pas les liens comme realpath et readlink et c'est la façon classique de faire que j'ai vue partout.

#! /bin/sh
echo "$(cd "$(dirname "$1")"; pwd -P)/$(basename "$1")"

4voto

akira Points 58339

Pour répondre à votre question avec ce que vous utilisez en ce moment :

l'alias se développe à l'endroit où vous tapez en ce moment. vous avez tapé :

% fp<SPACE>file.ext

cela devient

% echo `pwd`<SPACE>file.exe

vous pourriez utiliser une fonction pour éviter cela :

function fp() {
    echo `pwd`/"$1"
}

vous pouvez l'utiliser comme d'habitude :

% fp file.ext

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X