diff bin/xcp @ 0:2aa53823fb21

new repo
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Sat, 06 Jun 2026 10:19:04 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/xcp	Sat Jun 06 10:19:04 2026 +0100
@@ -0,0 +1,73 @@
+#!/usr/bin/bash
+usage=$'xcp host:[dir] files... [-r newName] # down
+ or
+xcp files... [-r newName] host:[dir] # up
+-r will rename the file after transfer, must be only one file!
+ dir is either absolute or will start from home'
+case $1 in
+ -*|'') echo "$usage" 1>&2; exit 1;;
+esac
+case "$1" in
+ *:*)
+ remote="$1"; shift
+ download=1
+ ;;
+esac
+if [ "$remote" ] ; then
+    bb=$(($# - 1))
+    if [ "${!bb}" = "-r" ]; then
+	newname=${!#}
+	set -- "${@: 1: $#-2}"
+	if [ $# -ne 1 ]; then
+	    echo "one file only allowed with rename!" "$@" 1>&2
+	    exit 3
+	fi
+    fi
+else
+ case "${!#}" in
+  *:*) remote="${!#}"
+       set -- "${@: 1: $#-1}"
+       bb=$(($# - 1))
+       if [ "${!bb}" = "-r" ]; then
+	   newname=${!#}
+	   set -- "${@: 1: $#-2}"
+           if [ $# -ne 1 ]; then
+	      echo "one file only allowed with rename!" "$@" 1>&2
+	      exit 3
+           fi
+       fi
+       ;;
+  *) echo "no remote spec.???" 1>&2; echo $usage 1>&2; exit 2;;
+ esac
+fi
+IFS=: read host dir < <(echo "$remote")
+cd="set cmd:fail-exit true; "
+if [ "$dir" ] ; then
+  cd="${cd}cd \"$dir\"; "
+fi
+if [ "$download" ] ; then
+ # get files from host
+ if [ "$newname" ] ; then
+     doit="${cd}get $(printf \ \'%s\' "$@") -o '$newname'; quit"
+ else
+     doit="${cd}mget $(printf \ \'%s\' "$@"); quit"
+ fi
+else
+ # put files to host
+ if [ "$newname" ] ; then
+     doit="${cd}put $(printf \ \'%s\' "$@") -o '$newname'; quit"
+ else
+     doit="${cd}mput $(printf \ \'%s\' "$@"); quit"
+ fi
+fi
+
+echo lftp -e "$doit" sftp://${host}: 1>&2
+lftp -e "$doit" sftp://${host}:
+res="$?"
+if [ "$res" = 0 ]
+then
+ echo success
+else
+ echo failed: $res
+fi
+