annotate bin/xcp @ 6:a6d23e7fab01 default tip

final, all sigs on multiple pages
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Thu, 08 Oct 2026 12:51:14 +0100
parents 2aa53823fb21
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
1 #!/usr/bin/bash
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
2 usage=$'xcp host:[dir] files... [-r newName] # down
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
3 or
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
4 xcp files... [-r newName] host:[dir] # up
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
5 -r will rename the file after transfer, must be only one file!
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
6 dir is either absolute or will start from home'
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
7 case $1 in
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
8 -*|'') echo "$usage" 1>&2; exit 1;;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
9 esac
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
10 case "$1" in
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
11 *:*)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
12 remote="$1"; shift
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
13 download=1
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
14 ;;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
15 esac
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
16 if [ "$remote" ] ; then
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
17 bb=$(($# - 1))
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
18 if [ "${!bb}" = "-r" ]; then
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
19 newname=${!#}
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
20 set -- "${@: 1: $#-2}"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
21 if [ $# -ne 1 ]; then
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
22 echo "one file only allowed with rename!" "$@" 1>&2
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
23 exit 3
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
24 fi
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
25 fi
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
26 else
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
27 case "${!#}" in
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
28 *:*) remote="${!#}"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
29 set -- "${@: 1: $#-1}"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
30 bb=$(($# - 1))
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
31 if [ "${!bb}" = "-r" ]; then
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
32 newname=${!#}
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
33 set -- "${@: 1: $#-2}"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
34 if [ $# -ne 1 ]; then
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
35 echo "one file only allowed with rename!" "$@" 1>&2
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
36 exit 3
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
37 fi
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
38 fi
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
39 ;;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
40 *) echo "no remote spec.???" 1>&2; echo $usage 1>&2; exit 2;;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
41 esac
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
42 fi
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
43 IFS=: read host dir < <(echo "$remote")
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
44 cd="set cmd:fail-exit true; "
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
45 if [ "$dir" ] ; then
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
46 cd="${cd}cd \"$dir\"; "
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
47 fi
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
48 if [ "$download" ] ; then
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
49 # get files from host
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
50 if [ "$newname" ] ; then
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
51 doit="${cd}get $(printf \ \'%s\' "$@") -o '$newname'; quit"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
52 else
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
53 doit="${cd}mget $(printf \ \'%s\' "$@"); quit"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
54 fi
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
55 else
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
56 # put files to host
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
57 if [ "$newname" ] ; then
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
58 doit="${cd}put $(printf \ \'%s\' "$@") -o '$newname'; quit"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
59 else
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
60 doit="${cd}mput $(printf \ \'%s\' "$@"); quit"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
61 fi
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
62 fi
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
63
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
64 echo lftp -e "$doit" sftp://${host}: 1>&2
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
65 lftp -e "$doit" sftp://${host}:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
66 res="$?"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
67 if [ "$res" = 0 ]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
68 then
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
69 echo success
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
70 else
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
71 echo failed: $res
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
72 fi
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
73