Existe uma maneira de condensar ../ .. partes de um caminho programaticamente?

3

Por exemplo, eu tenho esses tipos de caminhos para arquivos em um script:

/path/to/some/file/../../file1.txt

Existe um comando para o qual eu posso chamar, como readlink , que converterá esse caminho em sua forma física real:

/path/to/file1.txt
    
por slm 17.09.2013 / 19:42

2 respostas

4

Ah, perguntou rápido demais. No Linux, a resposta é usar readlink com a opção -m :

$ readlink -m /home/saml/web/../web_login_form_examples/basic-php-parsing.zip
/home/saml/web_login_form_examples/basic-php-parsing.zip

página do manual do readlink

-m, --canonicalize-missing
       canonicalize by following every symlink in every component of the
       given name recursively, without requirements on components existence
    
por 17.09.2013 / 19:46
3

Se você não estiver interessado em seguir file.txt quando for um link simbólico e estiver assumindo que o arquivo existe:

filename=/path/to/file1.txt
canonical_directory=$(cd -- "$(dirname -- "$filename")/" && pwd -P)
echo "$canonical_directory/${filename##*/}"

Isso é totalmente portátil (exceto para algumas antiguidades pré-POSIX).

    
por 18.09.2013 / 03:02