3939# actions with this script are at your own risk.
4040
4141usage_error () {
42- echo " Error: unrecognized option(s): $POSITIONAL "
43- echo " "
44- echo " Usage:"
45- echo " -a|--action backup|restore"
46- echo " -s|--source|--source-path /path/to/source/folder/or/file"
47- echo " (Remember that you should set /path/to/file in encrypt and no compression mode)"
48- echo " -d|--destination|--destination-path /path/to/destination/folder"
49- echo " -f|--filename some_filename"
50- echo " -p|--password some_password"
51- echo " -e|--excludelist /path/to/filename_of_list_to_exclude.txt"
52- echo " --encrypt"
53- echo " --compress"
54- echo " --clean-destination"
55- echo " --debug"
42+ cat << EOF >&2
43+ Error: unrecognized option(s): $POSITIONAL
44+
45+ Usage:
46+ -a|--action backup|restore
47+ -s|--source|--source-path /path/to/source/folder/or/file
48+ (Remember that you should set /path/to/file in encrypt and no compression mode)
49+ -d|--destination|--destination-path /path/to/destination/folder
50+ -f|--filename some_filename
51+ -p|--password some_password
52+ -e|--exclude-list /path/to/filename_of_list_to_exclude.txt
53+ --encrypt
54+ --compress
55+ --clean-destination
56+ --debug
57+ EOF
5658 exit 1
5759}
5860
61+ clean_destination () {
62+ $CLEAN_DESTINATION && (
63+ echo " Removing previous $1 file"
64+ rm -f " $1 "
65+ )
66+ }
67+
5968FILENAME=" "
6069COMPRESS_EXCLUDE=" "
6170ENCRYPT=false
@@ -69,33 +78,27 @@ while [[ $# -gt 0 ]]; do
6978 case $key in
7079 -a | --action)
7180 ACTION=" $2 "
72- shift
73- shift
81+ shift 2
7482 ;;
7583 -s | --source | --source-path)
7684 SOURCE_PATH=" $2 "
77- shift
78- shift
85+ shift 2
7986 ;;
8087 -d | --destination | --destination-path)
8188 DESTINATION_PATH=" $2 "
82- shift
83- shift
89+ shift 2
8490 ;;
8591 -f | --filename)
8692 FILENAME=" $2 "
87- shift
88- shift
93+ shift 2
8994 ;;
9095 -p | --password)
9196 PASSWORD=" $2 "
92- shift
93- shift
97+ shift 2
9498 ;;
95- -e | --excludelist )
99+ -e | --exclude-list )
96100 COMPRESS_EXCLUDE=" --exclude-from=$2 "
97- shift
98- shift
101+ shift 2
99102 ;;
100103 --encrypt)
101104 ENCRYPT=true
@@ -123,31 +126,16 @@ done
123126
124127set -- " ${POSITIONAL[@]} " # restore positional parameters
125128
126- if [[ -z $SOURCE_PATH ]]; then
127- SOURCE_PATH=$( pwd)
128- fi
129- if [[ -z $DESTINATION_PATH ]]; then
130- DESTINATION_PATH=$( pwd)
131- fi
129+ FULL_SOURCE_PATH=" ${SOURCE_PATH:- " $( pwd) /$FILENAME " } "
130+ FULL_DESTINATION_PATH=" ${DESTINATION_PATH:- " $( pwd) /$FILENAME " } "
131+ CURRENT_PATH=" $( pwd) "
132132
133- echo " DATE = $( date) "
134- echo " ACTION = ${ACTION} "
135- echo " SOURCE PATH = ${SOURCE_PATH} "
136- echo " DESTINATION PATH = ${DESTINATION_PATH} "
137- echo " ENCRYPT = ${ENCRYPT} "
138- echo " CLEAN DESTINATION = ${CLEAN_DESTINATION} "
139- echo " COMPRESS = ${COMPRESS} "
140- # shellcheck disable=SC2001
141- echo " PASSWORD = $( echo $$ PASSWORD | sed s/\. /* /g) "
142-
143- FULL_DESTINATION_PATH=" ${DESTINATION_PATH} /${FILENAME} "
144- FULL_SOURCE_PATH=" ${SOURCE_PATH} /${FILENAME} "
145- CURRENT_PATH=$( pwd)
146-
147- echo " FILENAME = ${FILENAME} "
148- echo " CURRENT PATH = ${CURRENT_PATH} "
149- echo " COMPRESS EXTRA ARGS = ${COMPRESS_EXCLUDE} "
150- echo " "
133+ for v in DATE ACTION ENCRYPT CLEAN_DESTINATION COMPRESS FILENAME CURRENT PATH COMPRESS EXTRA ARGS; do
134+ printf ' %-20s %s\n' " $v " " ${! v} "
135+ done
136+ printf ' %-20s %s\n' SOURCE_PATH " $( dirname " $FULL_SOURCE_PATH " ) "
137+ printf ' %-20s %s\n' DESTINATION_PATH " $( dirname " $FULL_DESTINATION_PATH " ) "
138+ printf ' %-20s %s\n' PASSWORD " $( echo $PASSWORD | sed s/\. /* /g) "
151139
152140# error handling
153141if [[ -n $1 ]]; then
162150
163151if [[ -z $FILENAME ]]; then
164152 echo " Error! Filename wasn't specified."
165- usage_eror
153+ usage_error
166154fi
167155
168156if [[ $ENCRYPT && -z $PASSWORD ]]; then
@@ -184,71 +172,45 @@ set -e
184172
185173# backup or restore with compression and no encryption
186174if [[ $ACTION == " backup" ]] && $COMPRESS && ! $ENCRYPT ; then
187- if $CLEAN_DESTINATION ; then
188- if [[ -f " $FULL_DESTINATION_PATH " ]]; then
189- echo " Removing previous ${FULL_DESTINATION_PATH} file"
190- rm -f " $FULL_DESTINATION_PATH "
191- fi
192- fi
193- cd " $SOURCE_PATH " || exit 1
194- tar " $COMPRESS_EXCLUDE " -czvf " $FULL_DESTINATION_PATH " . --numeric-owner
175+ clean_destination " $FULL_DESTINATION_PATH "
176+ tar $COMPRESS_EXCLUDE --numeric-owner -C " $( dirname " $FULL_SOURCE_PATH " ) " -czvf " $FULL_DESTINATION_PATH " .
195177fi
196178if [[ $ACTION == " restore" ]] && $COMPRESS && ! $ENCRYPT ; then
197179 if $CLEAN_DESTINATION ; then
198180 echo " Unable to clean-up path $DESTINATION_PATH in '-a restore --compress' mode."
199181 fi
200- cd " $DESTINATION_PATH " || exit 1
201- tar --numeric-owner -xzvf " $FULL_SOURCE_PATH " --directory " $( pwd) "
182+ tar --numeric-owner -C " $( dirname " $FULL_DESTINATION_PATH " ) " -xzvf " $FULL_SOURCE_PATH "
202183fi
203184
204185# backup or restore with compression and encryption
205186if $ENCRYPT && $COMPRESS ; then
206187 if [[ $ACTION == " backup" ]]; then
207- if $CLEAN_DESTINATION ; then
208- if [[ -f " $FULL_DESTINATION_PATH .enc" ]]; then
209- echo " Removing previous ${FULL_DESTINATION_PATH} .enc file"
210- rm -f " $FULL_DESTINATION_PATH " .enc
211- fi
212- fi
213- cd " $SOURCE_PATH " || exit 1
214- tar " $COMPRESS_EXCLUDE " --numeric-owner -czvf - . | gpg2 --symmetric --batch --yes \
215- --passphrase " $PASSWORD " --output " $FULL_DESTINATION_PATH " .enc --yes --force-mdc
188+ clean_destination " $FULL_DESTINATION_PATH " .enc
189+ tar $COMPRESS_EXCLUDE --numeric-owner -C " $( dirname " $FULL_SOURCE_PATH " ) " -czvf - . | gpg2 --symmetric --batch \
190+ --yes --passphrase " $PASSWORD " --output " $FULL_DESTINATION_PATH " .enc --force-mdc
216191 fi
217192 if [[ $ACTION == " restore" ]]; then
218193 if $CLEAN_DESTINATION ; then
219194 echo " Unable to clean-up path $DESTINATION_PATH in '-a restore --encrypt --compress' mode."
220195 fi
221- cd " $DESTINATION_PATH " || exit 1
222- echo " 123"
223196 gpg2 --decrypt --batch --yes --passphrase " $PASSWORD " " $FULL_SOURCE_PATH " .enc |
224- tar --numeric-owner -xzvf -
197+ tar --numeric-owner -C " $( dirname " $FULL_DESTINATION_PATH " ) " - xzvf -
225198 fi
226199fi
227200
228201# backup or restore with encryption and no compression
229202if $ENCRYPT && ! $COMPRESS ; then
230203 if [[ $ACTION == " backup" ]]; then
231- if $CLEAN_DESTINATION ; then
232- if [[ -f " $FULL_DESTINATION_PATH .enc" ]]; then
233- echo " Removing previous ${FULL_DESTINATION_PATH} .enc file"
234- rm -f " $FULL_DESTINATION_PATH " .enc
235- fi
236- fi
237- cd " $SOURCE_PATH " || exit 1
238- gpg2 --symmetric --batch --yes --passphrase " $PASSWORD " \
239- --output " $FULL_DESTINATION_PATH " .enc --force-mdc " $FILENAME "
204+ clean_destination " $FULL_DESTINATION_PATH " .enc
205+ gpg2 --symmetric --batch --yes --passphrase " $PASSWORD " --output " $FULL_DESTINATION_PATH " .enc --force-mdc \
206+ " $FULL_SOURCE_PATH "
240207 rm -f " $FULL_DESTINATION_PATH "
241208 fi
242209 if [[ $ACTION == " restore" ]]; then
243- if $CLEAN_DESTINATION ; then
244- if [[ -f " $FULL_DESTINATION_PATH " ]]; then
245- echo " Removing $FULL_DESTINATION_PATH file"
246- rm -f " $FULL_DESTINATION_PATH "
247- fi
248- fi
249- cd " $DESTINATION_PATH " || exit 1
210+ clean_destination " $FULL_DESTINATION_PATH "
250211 gpg2 --decrypt --batch --yes --passphrase " $PASSWORD " \
251212 --output " $FILENAME " " $FULL_SOURCE_PATH " .enc
213+ gpg2 --decrypt --batch --yes --passphrase " $PASSWORD " --output " $FULL_DESTINATION_PATH " " $FULL_SOURCE_PATH " .enc
252214 fi
253215fi
254216
0 commit comments