web-dev-qa-db-fra.com

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

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

echo `pwd`/file.ext

En essayant de le raccourcir, j'ai créé un alias bash:

alias fp='echo `pwd`/'

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

Une telle commande existe-t-elle déjà et me manque-t-elle? Sinon, comment pourrais-je créer un tel alias ou une telle fonction dans bash?

18
user31752

Sur les systèmes Linux, vous devez avoir readlink du projet GNU coreutils installé et vous pouvez le faire:

readlink -f file.ext

L’utilitaire realpath installé dans les systèmes Debian/ubuntu peut "fournir principalement les mêmes fonctionnalités que /bin/readlink -f dans le paquet coreutils".

22
Doug Harris

Au lieu de la commande pwd, utilisez la variable PWD (elle existe également 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 port des outils Unix a ses propres règles pour la traduction des chemins de fichiers. Avec Cygwin, utilisez l'utilitaire cygpath.

7
Gilles

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

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

% fp<SPACE>file.ext

cela devient

% echo `pwd`<SPACE>file.exe

vous pouvez utiliser une fonction pour éviter cela:

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

vous pouvez l'utiliser comme d'habitude:

% fp file.ext
4
akira

Vous pouvez utiliser:

realpath file.ext
3
cYrus