Convierta la ruta absoluta en una ruta relativa dado un directorio actual usando Bash
Ejemplo:
absolute="/foo/bar"
current="/foo/baz/foo"
# Magic
relative="../../bar"
¿Cómo creo la magia (con suerte, no un código demasiado complicado...)?
Aceptado
realpath
Creo 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
$ python -c "import os.path; print os.path.relpath('/foo/bar', '/foo/baz/foo')"
da:
../../bar
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.