[Linux-Biella] tutils per tape DAT SCSI (lungo)
LeOS
linux@bilug.linux.it
Mon, 03 Feb 2003 14:14:25 +0100
LeOS wrote:
trestore debuggato e funzionante (da me, betatester cercansi)
----------------
########################################################
# usage: #
# trestore #
########################################################
# NoTe: #
# This program is a part of three shell utils: #
# tdir - tsave - tinit - trestore #
# mt-st needed (of course this is a DAT utility!!! #
########################################################
# --- Create the temp dir in user home ---
if [ -e ~/tutils ] ; then
echo "Skipping Directory creation"
else
mkdir ~/tutils
fi
currentdir=$PWD
# --- Reach End Of Data on Tape ---
mt-st -f /dev/tape eod
# --- Rewind the Tape to reach the begin of saved Catalog ---
mt-st -f /dev/tape bsfm 3
# --- Restore the Catalog and view it ---
cp /dev/tape ~/tutils
tar xf ~/tutils/tape -C ~/tutils
cd ~/tutils
# --- Check the tape contents: if tape is just formatted, exit ---
lun=$(cat catalog |wc -l)
let lunnoheader=lun-6
if [ $lunnoheader -lt 6 ]; then
echo "The tape is empty..."
exit
fi
# --- funtions used, just to clean this dirty code ---
viewlist ()
{
clear
# --- print first 4 lines: header of the catalog ---
head -n 4 catalog
echo
filename=$(head -n $namepos catalog | tail -n 1)
begin=$(head -n $beginpos catalog | tail -n 1)
end=$(head -n $endpos catalog | tail -n 1)
ondate=$(head -n $datepos catalog | tail -n 1)
if [ $beginpos = 8 ]; then
let lastpos=lun-4
echo "First file:"
else
if [ $beginpos = $lastpos ]; then
echo "Last file:"
else
echo "Between First file and Last file ;)"
fi
fi
echo
begtemp=${begin##"At block "}
let diff=`expr length $begtemp`-1
begblock=`expr substr $begtemp 1 $diff`
endtemp=${end##"At block "}
let diff=`expr length $endtemp`-1
endblock=`expr substr $endtemp 1 $diff`
# --- Format the output ---
echo -n "| File:"
let difflen=`expr length $filename`-5
for ((counter=1 ; counter<=difflen ; counter++))
do
echo -n " "
done
echo -n " | Begin:"
let difflen=`expr length $begblock`-6
for ((counter=1 ; counter<=difflen ; counter++))
do
echo -n " "
done
echo -n " | End:"
let difflen=`expr length $endblock`-4
for ((counter=1 ; counter<=difflen ; counter++))
do
echo -n " "
done
echo -n " | Date:"
echo
echo -n "| "$filename
let difflen=5-`expr length $filename`
for ((counter=1 ; counter<=difflen ; counter++))
do
echo -n " "
done
echo -n " | "$begblock
let difflen=6-`expr length $begblock`
for ((counter=1 ; counter<=difflen ; counter++))
do
echo -n " "
done
echo -n " | "$endblock
let difflen=4-`expr length $endblock`
for ((counter=1 ; counter<=difflen ; counter++))
do
echo -n " "
done
echo " | "$ondate
echo
echo
echo "---[ file ]-----------------------------------------------------"
#echo
echo "[p]revious [n]ext [r]estore e[x]it [f]irst [l]ast"
#echo
echo "----------------------------------------------------------------"
echo
echo -n "Your choice: "
}
debug ()
{
echo "| NamePOS: "$namepos" | | BeginPOS: "$beginpos" | | Lun:
"$lun" | | LunOK: "$lunok" |"
echo
}
# --- position of the first file name, after the header of the catalog ---
namepos=6
while [ "$action" != x ]
do
# --- in the catalog file lines change for filename, starting and
ending position and date ---
let beginpos=namepos+2
let endpos=namepos+4
let datepos=namepos+5
viewlist
read -n 1 action
echo
echo
if [ $action = p ] ; then
if [ $namepos -gt 6 ] ; then
let namepos=namepos-7
fi
fi
if [ $action = n ] ; then
let lunok=lun-7
if [ $namepos -lt $lunok ] ; then
let namepos=namepos+7
fi
fi
if [ $action = l ] ; then
let namepos=lun-6
fi
if [ $action = f ] ; then
let namepos=6
fi
if [ $action = r ] ; then
echo "Restoring file: $filename - Beginning Block: $begblock"
# --- Restore Routine ---
cd $currentdir
mkdir restored
cd restored
mt-st -f /dev/tape seek $begblock
cp /dev/tape .
tar xf tape
tar zxf tempfile.tar.gz
rm tempfile.tar.gz ; rm tape
cd $currentdir
echo "Done!"
rm -Rf ~/tutils
exit
fi
if [ $action = x ] ; then
echo "Nothing done..."
cd $currentdir
rm -Rf ~/tutils
exit
fi
if [ $action = q ] ; then
echo "Nothing done..."
cd $currentdir
rm -Rf ~/tutils
exit
fi
done