Convierta la ruta absoluta en una ruta relativa dado un directorio actual usando Bash

Resuelto Paul Tarjan asked hace 14 años • 0 respuestas

Ejemplo:

absolute="/foo/bar"
current="/foo/baz/foo"

# Magic

relative="../../bar"

¿Cómo creo la magia (con suerte, no un código demasiado complicado...)?

Paul Tarjan avatar Apr 02 '10 08:04 Paul Tarjan
Aceptado

realpathCreo que usar desde GNU coreutils 8.23 ​​es lo más simple:

$ realpath --relative-to="$file1" "$file2"

Por ejemplo:

$ realpath --relative-to=/usr/bin/nmap /tmp/testing
../../../tmp/testing
modulus0 avatar Feb 15 '2015 04:02 modulus0
$ python -c "import os.path; print os.path.relpath('/foo/bar', '/foo/baz/foo')"

da:

../../bar
xni avatar Sep 05 '2011 07:09 xni

Está integrado en Perl desde 2001, por lo que funciona en casi todos los sistemas que puedas imaginar, incluso VMS .

perl -le 'use File::Spec; print File::Spec->abs2rel(@ARGV)' FILE BASE

Además, la solución es fácil de entender.

Entonces, para tu ejemplo:

perl -le 'use File::Spec; print File::Spec->abs2rel(@ARGV)' $absolute $current

...funcionaría bien.

Erik Aronesty avatar Jun 14 '2013 14:06 Erik Aronesty