Подтвердить что ты не робот

Как преобразовать относительный путь в абсолютный путь в Unix

Я хочу преобразовать

Относительный путь - /home/stevin/data/APP_SERVICE/../datafile.txt

к

Абсолютный путь - /home/stevin/data/datafile.txt

Есть ли встроенный в Unix инструмент для этого или какие-либо хорошие идеи относительно того, как я могу реализовать это.

-Стив

4b9b3361

Ответ 1

readlink -f /home/stevin/data/APP_SERVICE/../datafile.txt должен делать то, что вы ищете, если ваш Unix/Linux имеет readlink.

Ответ 2

Что-то вроде этого может помочь для каталогов: (Для файлов добавьте basename)

echo $(cd ../dir1/dir2/; pwd)

Для файлов

filepath=../dir1/dir2/file3
echo $(cd $(dirname $filepath); pwd)/$(basename $filepath)

Ответ 3

Я удивлен, что никто еще не упоминает realpath. Передайте ваши пути к realpath, и он будет канонизировать их.

$ ls
Changes
dist.ini

$ ls | xargs realpath
/home/steven/repos/perl-Alt-Module-Path-SHARYANTO/Changes
/home/steven/repos/perl-Alt-Module-Path-SHARYANTO/dist.ini

Ответ 4

На основе ответ Thrustmaster, но с чистым bash:

THING="/home/stevin/data/APP_SERVICE/../datafile.txt"
echo "$(cd ${THING%/*}; pwd)/${THING##*/}"

Конечно, cd требует, чтобы на самом деле существовал путь, который может не всегда иметь место - в этом случае вы, вероятно, будете иметь более простой способ, написав вместо этого небольшой Python script...