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

Unix中如何将相对路径转换为绝对路径,unix,Unix,我想皈依 相对路径-/home/stevin/data/APP\u SERVICE/。/datafile.txt 到 绝对路径-/home/stevin/data/datafile.txt Unix中是否有内置的工具来执行此操作,或者关于如何实现此操作有什么好主意 -Stevereadlink-f/home/stevin/data/APP\u SERVICE/./datafile.txt应该满足您的需要,假设您的Unix/Linux具有readlink类似的内容可以帮助目录:(对于文件,请附加b

我想皈依

相对路径-
/home/stevin/data/APP\u SERVICE/。/datafile.txt

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

Unix中是否有内置的工具来执行此操作,或者关于如何实现此操作有什么好主意


-Steve

readlink-f/home/stevin/data/APP\u SERVICE/./datafile.txt
应该满足您的需要,假设您的Unix/Linux具有
readlink

类似的内容可以帮助目录:(对于文件,请附加
basename

对于文件

filepath=../dir1/dir2/file3
echo $(cd $(dirname $filepath); pwd)/$(basename $filepath)
基于但使用纯bash:

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

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

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

也许你可以更新你的问题,说明你为什么认为你需要这样做。这是一个功能!祝你好运。我正在将相对路径标记到一个小文件中,然后使用此条目将文件复制到其他位置。但是,APP_服务文件夹有时可能不存在,并导致使用此相对路径进行复制失败。+1实际上
echo“$(cd$(dirname$thingie);pwd)/$(basename$thingie)”
对文件和目录都起作用,因为
dirname
basename
只处理字符串,而不关心它们处理的字符串是否是实际的FSobject@TobiasKienzler哦,是的,这实际上是一个打字错误,我到现在还没有看到,同时有
。/dir1/dir2/file3
$t
。我会解决的。:)由于OP提到甚至没有
readlink
,这是一个解决方案,它甚至不需要
dirname
basename
。@TobiasKienzler
thingie=/;echo“$(cd$(dirname$thingie);pwd)/$(basename$thingie)”
输出
//
。不good@beluchin您可能希望将该注释放在链接答案的下方,而不是此注释-实际上允许使用附加的斜杠,并且大多数情况下会被忽略,默认情况下在您的系统上安装AFAIKIs
realpath
?不清楚“Unix内置工具”是什么意思(OP可能指内部shell命令)。甚至“默认安装”也很模糊,因为操作系统安装程序通常允许用户选择要安装的组件。至于
realpath
,它与Debian/Ubuntu一起提供,是一个很好的选择。但无论如何,OP也会询问“任何好主意”。在我的系统上,我需要添加
-f
选项。很好!另外,readlink的手册页上说“注意realpath(1)是用于规范化功能的首选命令。”
$ 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