Толик Панков
hex_laden
............ .................. ................

November 2020
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Толик Панков [userpic]
Получение относительного пути в Linux

Преамбула


Почему-то много написано, про то, как относительный путь преобразовать в абсолютный, или же получить абсолютный путь к текущему каталогу, а как получить относительный путь из одного каталога в другой, еле нашел.

Пример


Скажем, есть 2 каталога, известны полные пути:
/tmp/test/dir1/subidr1/startpoint и /tmp/test/dir2/subdir2/endpoint, надо получить относительный путь из каталога startpoint в каталог endpoint

Команда realpath.


Проще всего получить относительный путь командой realpath со следующими параметрами:

realpath --relative-to="ОТКУДА" "КУДА"
где:
ОТКУДА - стартовый каталог
КУДА - конечный каталог

Выполнение команды
realpath --relative-to="/tmp/test/dir1/subidr1/startpoint" "/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/poluchenie-otnositelnogo-puti-v-linux/

Tags: ,
Comments
(Anonymous)

идро линуха теперь будет в новой винде

(Anonymous)

На конференции для разработчиков Build 2019 корпорация Microsoft представила собственную подсистему Windows Subsystem for Linux 2 (WSL 2) с полноценным встроенным ядром Linux, основанном на стабильной долгосрочной версии ядра 4.19. Оно будет обновляться через Windows Update, а также появится в виде отдельного дистрибутива.

Вот и всё.

И пусть будет. Хорошо же.

(Anonymous)

Я тоже "за". Прям в винде можно будет всё под линух гонять.

Теперь ждем и надеемся на ответный шаг M$ - пусть откроют код WinXP, тогда, наконец, получим ReactOS с поддержкой новых устройств и исправленными глюками - нормальную ОФИСНУЮ ОС (набирать документы с полноценной клавиатуры, читать почту и ходить в интернеты на PIII 700 и аналогах).

жыдомасоны садковы с любянки убили идеальную ОС для КПК - палмОС! пидарасы

не застал, когда на кпк была palm os они стоили как самолет, а денег у меня было на козу.