blob: dcf01edb2089ab3a5ee80d45ce185050d54c35cd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#!/bin/sh
#
# smbtar script - front end to smbclient
#
# Authors: Martin.Kraemer <Martin.Kraemer@mch.sni.de>
# and Ricky Poulten (ricky@logcam.co.uk)
#
# (May need to change shell to ksh for HPUX or OSF for better getopts)
case $0 in
# when called by absolute path, assume smbclient is in the same directory
/*)
SMBCLIENT="`dirname $0`/smbclient";;
*) # you may need to edit this to show where your smbclient is
SMBCLIENT="smbclient";;
esac
# These are the default values. You could fill them in if you know what
# you're doing, but beware: better not store a plain text password!
server=""
service="backup" # Default: a service called "backup"
password=""
username=$LOGNAME # Default: same user name as in *nix
verbose="2>/dev/null" # Default: no echo to stdout
log="-d 2"
newer=""
blocksize=""
tarcmd="c"
tarargs=""
cdcmd="\\"
tapefile=${TAPE-tar.out}
Usage(){
ex=$1
shift
echo >&2 "Usage: `basename $0` [<options>] [<include/exclude files>]
Function: backup/restore a Windows PC directories to a local tape file
Options: (Description) (Default)
-r Restore from tape file to PC Save from PC to tapefile
-i Incremental mode Full backup mode
-v Verbose mode: echo command Don't echo anything
-s <server> Specify PC Server $server
-p <password> Specify PC Password $password
-x <share> Specify PC Share $service
-X Exclude mode Include
-N <newer> File for date comparison `set -- $newer; echo $2`
-b <blocksize> Specify tape's blocksize `set -- $blocksize; echo $2`
-d <dir> Specify a directory in share $cdcmd
-l <log> Specify a Samba Log Level `set -- $log; echo $2`
-u <user> Specify User Name $username
-t <tape> Specify Tape device $tapefile
"
echo >&2 "$@"
exit $ex
}
while getopts rivl:b:d:N:s:p:x:u:Xt: c; do
case $c in
r) # [r]estore to Windows (instead of the default "Save from Windows")
tarcmd="x"
;;
i) # [i]ncremental
tarargs=${tarargs}g
;;
l) # specify [l]og file
log="-d $OPTARG"
case "$OPTARG" in
[0-9]*) ;;
*) echo >&2 "$0: Error, log level not numeric: -l $OPTARG"
exit 1
esac
;;
d) # specify [d]irectory to change to in server's share
cdcmd="$OPTARG"
;;
N) # compare with a file, test if [n]ewer
if [ -f $OPTARG ]; then
newer=$OPTARG
tarargs=${tarargs}N
else
echo >&2 $0: Warning, $OPTARG not found
fi
;;
X) # Add exclude flag
tarargs=${tarargs}X
;;
s) # specify [s]erver's share to connect to - this MUST be given.
server="$OPTARG"
;;
b) # specify [b]locksize
blocksize="$OPTARG"
case "$OPTARG" in
[0-9]*) ;;
*) echo >&2 "$0: Error, block size not numeric: -b $OPTARG"
exit 1
esac
tarargs=${tarargs}b
;;
p) # specify [p]assword to use
password="$OPTARG"
;;
x) # specify windows [s]hare to use
service="$OPTARG"
;;
t) # specify [t]apefile on local host
tapefile="$OPTARG"
;;
u) # specify [u]sername for connection
username="$OPTARG"
;;
v) # be [v]erbose and display what's going on
verbose=""
;;
'?') # any other switch
Usage 2 "Invalid switch specified - abort."
;;
esac
done
shift `expr $OPTIND - 1`
if [ "$server" = "" ] || [ "$service" = "" ]; then
Usage 1 "No server or no service specified - abort."
fi
# if the -v switch is set, the echo the current parameters
if [ -z "$verbose" ]; then
echo "server is $server"
# echo "share is $service"
echo "share is $service\\$cdcmd"
echo "tar args is $tarargs"
# echo "password is $password" # passwords should never be sent to screen
echo "tape is $tapefile"
echo "blocksize is $blocksize"
fi
eval $SMBCLIENT "'\\\\$server\\$service'" "'$password'" -U "'$username'" \
-E -N $log -D "'$cdcmd'" \
-T${tarcmd}${tarargs} $blocksize $newer $tapefile $* $verbose
|