A Newbie’s Scripts for Cygwin 2

March 19th, 2007 § 0 comments

一个获得相对路径的脚本
小例子:

$ 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

Category Brain

Tagged

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>