Como obter o caminho completo de um arquivo no bash?

13

Eu gostaria de uma maneira fácil de obter o caminho completo para um arquivo. Eu atualmente digito isso:

echo 'pwd'/file.ext

Tentando encurtá-lo, criei um alias bash:

alias fp='echo 'pwd'/'

Mas agora, se eu digitar fp file.ext , há um espaço que aparece entre o / e o file.ext .

Esse comando já existe e estou sentindo falta dele? Se não, como eu iria criar tal alias ou função no bash?

    
por Jens Erat 23.10.2010 / 17:03

4 respostas

17

Em sistemas linux, você deve ter readlink do projeto GNU coreutils instalado e pode fazer isso:

readlink -f file.ext

Os sistemas Debian / ubuntu podem ter o utilitário realpath instalado que "fornece basicamente a mesma funcionalidade que /bin/readlink -f no pacote coreutils. "

    
por 23.10.2010 / 17:33
6

Em vez do comando pwd , use a variável PWD (também no POSIX):

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

Se você precisa dar suporte ao Windows, reconhecer caminhos absolutos será mais complicado, já que cada porta de ferramentas unix possui suas próprias regras para traduzir caminhos de arquivos. Com o Cygwin, use o utilitário cygpath .

    
por 24.10.2010 / 00:31
4

para responder à sua pergunta com o que você usa agora:

o alias se expande na posição em que você está digitando agora. você digitou:

% fp<SPACE>file.ext

isso se torna

% echo 'pwd'<SPACE>file.exe

você pode usar uma função para evitar isso:

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

você pode usar isso como de costume:

% fp file.ext
    
por 23.10.2010 / 18:36
3

Você pode usar:

realpath file.ext
    
por 23.10.2010 / 17:18