Ответ 1
readlink -f /home/stevin/data/APP_SERVICE/../datafile.txt
должен делать то, что вы ищете, если ваш Unix/Linux имеет readlink
.
Я хочу преобразовать
Относительный путь - /home/stevin/data/APP_SERVICE/../datafile.txt
к
Абсолютный путь - /home/stevin/data/datafile.txt
Есть ли встроенный в Unix инструмент для этого или какие-либо хорошие идеи относительно того, как я могу реализовать это.
-Стив
readlink -f /home/stevin/data/APP_SERVICE/../datafile.txt
должен делать то, что вы ищете, если ваш Unix/Linux имеет readlink
.
Что-то вроде этого может помочь для каталогов: (Для файлов добавьте basename
)
echo $(cd ../dir1/dir2/; pwd)
Для файлов
filepath=../dir1/dir2/file3
echo $(cd $(dirname $filepath); pwd)/$(basename $filepath)
Я удивлен, что никто еще не упоминает 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
На основе ответ Thrustmaster, но с чистым bash:
THING="/home/stevin/data/APP_SERVICE/../datafile.txt"
echo "$(cd ${THING%/*}; pwd)/${THING##*/}"
Конечно, cd
требует, чтобы на самом деле существовал путь, который может не всегда иметь место - в этом случае вы, вероятно, будете иметь более простой способ, написав вместо этого небольшой Python script...