Code: Select all
#!/bin/bash
#
# wrapper for ps2client to do complete MC backup
#
# USAGE: mc-backup.sh [dest] [src-mc]
# [dest] is local destination directory. Default is "mc0.YYYY-MM-DD.HHMM"
# [src-mc] is memory card to backup. Default is "mc0:"
#
# no warranty... unlikely to break anything,
# no copyright... most people can whip this up in their sleep
#
PS2C="ps2client"
DATE="date"
AWK="awk"
Fcnt=0
Dcnt=0
# make sure we have what we need
for X in $PS2C $AWK $DATE ; do
Z=`$X --version`
if [ $? -eq 127 ]; then
echo "### ERROR: '$X' not found"
exit -1
fi
done
DoDir() { # $1 mc dir to process
PS2Cmd="$PS2C dir $1"
T=`$PS2Cmd`
if [ $? -ne 0 ]; then
echo -n "ERROR: '$PS2Cmd' returned: "
$PS2Cmd
echo "PS2 probably need to be reset by running 'ps2client reset'"
exit -1
fi
IFS=$'\x0A'$'\x0D'
G=`echo "$T" | awk ' \$1 ~ /^-r/ { A=substr($0,45); print A } '`
for F in `echo "$G"` ; do
Z=`$PS2C copyfrom "$1/$F" "$F"`
if [ $? -ne 0 ]; then echo "ERROR on copy."; fi
# change to ' echo "$Z" ' to get long output
echo $Z
let Fcnt+=1
done
unset IFS
for D in `$PS2Cmd | awk ' \$1 ~ /^d/ && \$5 != "." && \$5 != ".." { print $5 } '` ; do
echo "INFO: Descending into '$D' "
Descend $D $1
let Dcnt+=1
done
}
Descend () { # $1 dir name, $2 current dir
Z=`mkdir $1 2>&1`
if [ $? -ne 0 ]; then echo "ERROR: $Z"; exit -1; fi
cd $1
DoDir "$2/$1"
cd ..
}
SRC="mc0:" # default source (mc) ($2)
DEST="$SRC."`$DATE "+%F.%k%M"` # default dest (local dir) ($1)
if [ -n "$1" ] ; then DEST=$1; fi
if [ -n "$2" ] ; then SRC=$2; fi
echo "Backing up '$SRC' to '$DEST'"
Z=`mkdir $DEST 2>&1`
if [ $? -ne 0 ]; then echo "ERROR: $Z"; exit -1; fi
cd $DEST
DoDir $SRC
echo
echo "SUMMARY: $Dcnt directories, $Fcnt files processed."