如何在Unix中将相对路径转换为绝对路径

时间:2012-06-28 13:53:27

标签: unix

我想转换

相对路径 - /home/stevin/data/APP_SERVICE/../datafile.txt

绝对路径 - /home/stevin/data/datafile.txt

在Unix中是否有内置工具可以执行此操作或有关如何实现此功能的任何好主意。

-Steve

4 个答案:

答案 0 :(得分:31)

假设你的Unix / Linux有readlink -f /home/stevin/data/APP_SERVICE/../datafile.txt

readlink应该做你想要的。

答案 1 :(得分:19)

这样的东西可以帮助目录:(对于文件,附加basename

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

对于文件,

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

答案 2 :(得分:14)

我很惊讶没人提到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

答案 3 :(得分:1)

基于Thrustmaster's answer但纯粹的bash:

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

当然cd需要实际存在的路径,这可能并非总是如此 - 在这种情况下,通过编写一个小的Python脚本,你可能会有更简单的生活......