我想转换
相对路径 -/home/stevin/data/APP_SERVICE/../datafile.txt
至
绝对路径 -/home/stevin/data/datafile.txt
Unix中是否有内置工具可以执行此操作,或者关于如何实现此操作的任何好主意?
我想转换
相对路径 -/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 脚本来过上更简单的生活......
这是我的辅助功能
# get a real path from a relative path.
function realPath() {
if [[ -d "$1" ]]; then
currentPath="$(pwd)" # save current path
cd "$1" || exit 1 # cd to the checking dir
pwd
cd "$currentPath" || exit 1 # restore to original path
else
echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")"
fi
}