Index: cpsvndir
===================================================================
--- cpsvndir	(revision 21699)
+++ cpsvndir	(working copy)
@@ -2,8 +2,6 @@
 #
 # cpsvndir: recursive directory copy excluding .svn sub dirs.
 
-DESTDIR=$2
-SOURCE=$(basename "$1")
 
 if [ -z "$1" -o -z "$2" ]; then
     echo "Usage: $0 source-dir destination-dir"
@@ -23,13 +21,17 @@
     if [ -z "$EGID" ];     then EGID=0       ;fi  # Will fail if not root
 fi
 
-mkdir -p $DESTDIR/$SOURCE || exit 1
+# Build directory structure
+IFS=$'\012'
+for directory in $(find "$1" -path '*/.svn' -prune -or -type d -print); do
+    mkdir -p "$2/${1##*/}/${directory/#$1}"
+done
 
-find $SOURCE -path '*/.svn' -prune -or -type d -exec mkdir -p $DESTDIR/{} \;
-find $SOURCE -path '*/.svn' -prune -or ! -type d \
-             -exec cp -p {}    $DESTDIR/{} \; \
-             -exec chown $EUID $DESTDIR/{} \; \
-             -exec chgrp $EGID $DESTDIR/{} \; \
-             -exec chmod +r    $DESTDIR/{} \;
+# Copy files
+for file in $(find "$1" -path '*/.svn' -prune -or ! -type d -print); do
+    cp -pR "$file" "$2/${1##*/}/${file/#$1}"
+    chown $EUID:$EGID "$2/${1##*/}/${file/#$1}" &> /dev/null
+    chmod +r "$2/${1##*/}/${file/#$1}" &> /dev/null
+done
 
 exit 0
