一个获得相对路径的脚本
小例子:
$ getrelpath d:/HelloWorld/b d:/HelloWorld/a/bbb/c.jpg ../a/bbb/c.jpg
源文件:
#!/bin/bash # get relative pathname of a file from a given dir # Michael.Fantasia@Gmail.com if [ "$#" -ne "2" ] then echo "Usage: $(basename $0) dirname filename" >&2 exit 1 fi dirname=$(echo $1/ | sed 's@/*$@/@') if [ -d "$2" ] then filename=$(echo $2/ | sed 's@/*$@/@') else filename=$2 fi path='[^/]*/' i=1 while [ "$i" -ne "0" ] do pathdir=$(k=0;while [ "$k" -lt "$i" ];do echo -n $path;((k=k+1));done) str1=$(expr "$dirname" : '('"$pathdir"')') str2=$(expr "$filename" : '('"$pathdir"')') if [ "$str1" != "$str2" -o -z "$str1" ] then ((i=i-1)) break fi ((i=i+1)) done if [ "$i" -eq "0" ] then echo $2 exit 0 fi pathdir=$(k=0;while [ "$k" -lt "$i" ];do echo -n $path;((k=k+1));done) str1=$(echo $(expr "$dirname" : "$pathdir"'(.*)')/ | sed 's@/*$@/@;s@[^/]+@..@g') str2=$(expr "$filename" : "$pathdir"'(.*)') echo $str1$str2 | sed 's@^/@./@' exit 0