From: Bob F. <bfr...@si...> - 2002-06-01 21:52:54
|
I wrote up this short shell script (which I call "winpath.sh") to convert paths from POSIX form to Windows form. It works under both MSYS and Cygwin. Execution time on a 2GHz Pentium IV is about 1/2 a second (1/2 a second too long). There is a provision for adding varying levels of backslash escapes to the output. Feel free to use the script for whatever you want. Bob #!/bin/sh # # Convert the specified POSIX path to a Windows path under MinGW and Cygwin # The optional second parameter specifies the level of backslash escaping # to apply for each Windows backslash position in order to support varying # levels of variable substitutions in scripts. # # Note that Cygwin includes the 'cygpath' utility, which already provides # path translation capability. # # Written by Bob Friesenhahn <bfr...@si...> June 2002 # arg="$1" escapes=0 if test -n "$2" then escapes="$2" fi if test $escapes -gt 3 then echo "$0: escape level must in range 0 - 3" exit 1 fi result='' length=0 max_length=0 mount | sed -e 's:\\:/:g' | ( IFS="\n" while read mount_entry do win_mount_path=`echo "$mount_entry" | sed -e 's: .*::g'` unix_mount_path=`echo "$mount_entry" | sed -e 's:.* on ::;s: type .*::'` temp=`echo "$arg" | sed -e "s!^$unix_mount_path!$win_mount_path!"` if test "$temp" != "$arg" then candidate="$temp" length=${#unix_mount_path} if test $length -gt $max_length then result=$candidate max_length=$length fi fi done if test -z "$result" then echo "$0: path \"$arg\" is not mounted" exit 1 fi case $escapes in 0) echo "$result" | sed -e 's:/:\\:g' ;; 1) echo "$result" | sed -e 's:/:\\\\:g' ;; 2) echo "$result" | sed -e 's:/:\\\\\\\\:g' ;; 3) echo "$result" | sed -e 's:/:\\\\\\\\\\\\\\\\:g' ;; esac exit 0; ) |