[lvm-devel] [PATCH 2/3] Script to create proper relative path

Zdenek Kabelac zkabelac at redhat.com
Thu Apr 15 09:40:04 UTC 2010


This script takes two real paths and calculates relative
path between them. Script is used for creation of relative
path /usr/lib/lib.so -> /lib/lib.so.1.2

i.e.   relpath.sh   a/b/c/d  a/b/e/f/g/g  -> ../../e/f/g/g/

Signed-off-by: Zdenek Kabelac <zkabelac at redhat.com>
---
 scripts/relpath.sh |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)
 create mode 100755 scripts/relpath.sh

diff --git a/scripts/relpath.sh b/scripts/relpath.sh
new file mode 100755
index 0000000..3e79a0d
--- /dev/null
+++ b/scripts/relpath.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+# usage: relpath from to
+#
+# modified script from to avoid print of ./:
+# http://stackoverflow.com/questions/2564634/bash-convert-absolute-path-into-relative-path-given-a-current-directory 
+# 
+
+from=${1%%/}
+to=${2%%/}
+
+test "$from" == "$to" && exit
+
+IFS="/"
+
+current=($from)
+absolute=($to)
+
+abssize=${#absolute[@]}
+cursize=${#current[@]}
+
+while [[ ${absolute[$level]} == ${current[$level]} ]]
+do
+    (( level++ ))
+    if (( level > abssize || level > cursize ))
+    then
+        break
+    fi
+done
+
+for ((i = level; i < cursize; i++))
+do
+    if ((i > level))
+    then
+        newpath=$newpath"/"
+    fi
+    newpath=$newpath".."
+done
+
+for ((i = level; i < abssize; i++))
+do
+    if [[ -n $newpath ]]
+    then
+        newpath=$newpath"/"
+    fi
+    newpath=$newpath${absolute[i]}
+done
+
+echo "$newpath/"
-- 
1.7.0.1




More information about the lvm-devel mailing list