Получение относительного пути в Linux
Почему-то много написано, про то, как относительный путь преобразовать в абсолютный, или же получить абсолютный путь к текущему каталогу, а как получить относительный путь из одного каталога в другой, еле нашел.
Скажем, есть 2 каталога, известны полные пути:
/tmp/test/dir1/subidr1/startpoint
и /tmp/test/dir2/subdir2/endpoint
, надо получить относительный путь из каталога startpoint
в каталог endpoint
Проще всего получить относительный путь командой
realpath
со следующими параметрами:realpath --relative-to="ОТКУДА" "КУДА"
где:
ОТКУДА
- стартовый каталогКУДА
- конечный каталогВыполнение команды
realpath --relative-to="/tmp/test/dir1/subidr1/st artpoint" "/tmp/test/dir2/subdir2/endpoint"
выведет на экран относительный путь:
../../../dir2/subdir2/endpoint
Если каталог не существует, будет отображена ошибка:
realpath: /tmp/test/dir2/subdir2/endpoint: No such file or directory
Утилита
realpath
входит в пакет coreutils, поэтому есть везде, кроме старых и совсем урезанных дистрибутивов:#!/bin/bash
#get relative path example
#start path: /tmp/test/dir1/subidr1/startpoint
#end path: /tmp/test/dir2/subdir2/endpoint
START="/tmp/test/dir1/subidr1/startpoint"
END="/tmp/test/dir2/subdir2/endpoint"
mkdir -p "$START"
mkdir -p "$END"
cd "$START"
echo -n "Start directory:"
pwd
RP=`realpath --relative-to="$START" "$END"`
echo "Relative path: $RP"
echo "CD to relative path:"
cd "$RP"
echo -n "End directory:"
pwd
На PasteBin
На GitHub
qaru.site - там предлагаются и другие способы, разной степени велосипедности, например, использовать Python или получать относительный путь исключительно средствами оболочки (на мой взгляд, неудобно, и можно где-нибудь накосячить).
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/06/02/polu