192 lines
4.0 KiB
Plaintext
192 lines
4.0 KiB
Plaintext
|
|
#!/bin/bash
|
|
|
|
dev=floppy
|
|
dir=~/.backpack
|
|
name=`hostname -s`
|
|
|
|
# Anything outside of the standard syntax (i.e., two characters) resets the
|
|
# parameters to NULL, which will invoke "-h".
|
|
[ ${#1} -gt 2 ] && { set --; }
|
|
|
|
# Note that this is not a "while" loop: "getopts" only sees one option.
|
|
getopts "achu" opt
|
|
|
|
case $opt
|
|
in
|
|
c) [ ! -d $dir ] && { mkdir $dir; >$dir/permlist; >$dir/templist; }
|
|
|
|
clear
|
|
cat <<- !
|
|
The format of these file lists is one file or directory per line,
|
|
like this:
|
|
|
|
/home/joe/netscape/bookmarks.html
|
|
/var/mail
|
|
/usr/share/dict/words
|
|
|
|
The files in the permanent list will be archived every time; the
|
|
temporary list will be cleared between runs.
|
|
|
|
Would you like to edit the permanent file list? [yN]
|
|
!
|
|
|
|
read choice
|
|
[ "$choice" == "y" ] && {
|
|
cp $dir/permlist $dir/permlist.tmp
|
|
$EDITOR $dir/permlist.tmp
|
|
err=""
|
|
for f in `cat $dir/permlist.tmp`
|
|
do
|
|
[ -e $f ] || err=$f
|
|
done
|
|
clear
|
|
|
|
[ "$err" != "" ] && {
|
|
rm $dir/permlist.tmp
|
|
echo "ERROR: $err does not exist; the permanent list was NOT updated."
|
|
echo
|
|
exit
|
|
} || {
|
|
mv $dir/permlist.tmp $dir/permlist
|
|
echo
|
|
echo "The permanent file list has been updated."
|
|
echo
|
|
}
|
|
}
|
|
|
|
echo "Would you like to edit the temporary file list? [yN]"
|
|
read choice
|
|
[ "$choice" == "y" ] && {
|
|
cp $dir/templist $dir/templist.tmp
|
|
$EDITOR $dir/templist.tmp
|
|
err=""
|
|
for f in `cat $dir/templist.tmp`
|
|
do
|
|
[ -e $f ] || err=$f
|
|
done
|
|
clear
|
|
|
|
[ "$err" != "" ] && {
|
|
rm $dir/templist.tmp
|
|
echo
|
|
echo "ERROR: $err does not exist; the temporary list was NOT updated."
|
|
echo
|
|
exit
|
|
} || {
|
|
mv $dir/templist.tmp $dir/templist
|
|
echo
|
|
echo "The temporary file list has been updated."
|
|
echo
|
|
}
|
|
}
|
|
;;
|
|
|
|
a) [ -f "$dir/permlist" -a -f "$dir/templist" ] || {
|
|
echo "You must first create the file lists."
|
|
exit
|
|
}
|
|
|
|
# Read both file lists and create the archive
|
|
tar -cvzf $dir/bp$name.tgz `cat $dir/permlist $dir/templist`
|
|
[ $? -gt 0 ] && { echo 'Error in archive creation! Aborting.'; exit; }
|
|
|
|
# Add up the file sizes
|
|
size=$(ls -l $dir/permlist $dir/templist $dir/bp$name.tgz $0 |awk '{ t+=$5 } END { print t }')
|
|
[ $size -gt "1474560" ] && {
|
|
cat <<- !
|
|
|
|
Warning: The archive you created is $size bytes long; that's bigger
|
|
than the standard (1.44MB) floppy. Make sure it'll fit on your disk.
|
|
|
|
Press 'Enter' to continue or 'Ctrl-C' to abort.
|
|
|
|
!
|
|
read
|
|
}
|
|
|
|
while [ $dev == ${dev%/*} ]
|
|
do
|
|
cat <<- !
|
|
|
|
Please enter the complete path to the directory where
|
|
the floppy will be mounted, like
|
|
|
|
/mnt/floppy
|
|
|
|
NOTE: Make sure your floppy has enough space for all the files;
|
|
a formatted blank disk is best of all.
|
|
|
|
!
|
|
read dev
|
|
done
|
|
|
|
[ `mount|grep -c $dev` -eq 0 ] && mount $dev
|
|
|
|
[ $? -eq 0 ] || { echo 'OOPS! Mount problem!'; exit; }
|
|
|
|
rm -f $dev/bp*tgz
|
|
cp $0 $dir/bp$name.tgz $dir/permlist $dir/templist $dev
|
|
|
|
[ $? -eq 0 ] && {
|
|
echo -e "\nYour BackPack floppy has been created in $dev.\n"
|
|
> $dir/templist
|
|
} || {
|
|
cat <<- !
|
|
|
|
ERROR: BackPack ran into a problem; something failed
|
|
while copying the archive to $dev. Possible causes
|
|
might be things like a full or a damaged floppy. Please
|
|
correct whatever is wrong and try again.
|
|
|
|
!
|
|
}
|
|
|
|
sync
|
|
umount $dev
|
|
;;
|
|
|
|
u) [ -d $dir ] || mkdir $dir
|
|
|
|
while [ $dev == ${dev%/*} ]
|
|
do
|
|
cat <<- !
|
|
|
|
Please enter the complete path to the directory where
|
|
the BackPack floppy is mounted, i.e.
|
|
|
|
/mnt/floppy
|
|
|
|
!
|
|
read dev
|
|
done
|
|
|
|
[ `mount|grep -c $dev` -eq 0 ] && mount $dev
|
|
|
|
[ $? -eq 0 ] || { echo 'OOPS! Mount problem!'; exit; }
|
|
|
|
echo "Creating a backup archive of the local files in $dir/bp$name.old.tgz..."
|
|
tar cz --ignore-failed-read -f $dir/bp$name.old.tgz `cat $dev/permlist $dev/templist` > /dev/null 2>&1
|
|
echo "Replacing local files with BackPack versions..."
|
|
tar xz -C / -f $dev/bp*tgz
|
|
|
|
sync
|
|
umount $dev
|
|
;;
|
|
|
|
h|*) cat <<- !
|
|
|
|
*BackPack* by Ben Okopnik 6/2001
|
|
|
|
backpack -[cauh]
|
|
|
|
-c Create or edit the file list[s]
|
|
-a Archive the files in the selection list[s]
|
|
-u Unpack the archive (interactive prompts)
|
|
-h Help - display this usage message
|
|
|
|
!
|
|
;;
|
|
esac
|
|
|