Skip to content

Instantly share code, notes, and snippets.

@puckbag
Last active December 19, 2015 12:59
Show Gist options
  • Save puckbag/5958482 to your computer and use it in GitHub Desktop.
Save puckbag/5958482 to your computer and use it in GitHub Desktop.
A shell script to automate syncing a website downstream during development, including a database and media directory. Supports (MySQL,MsSQL) --> (MySQL,SQLite). Requires wget and sequel. Assumes broco environment.
#!/bin/bash
doc_root=
ftp_domain=
ftp_host=
ftp_user=
ftp_pass=
db_remote_type=tinytds
db_remote_data=
db_remote_host=
db_remote_user=
db_remote_pass=
db_local_type=mysql
db_local_data=
db_local_host=
db_local_user=
db_local_pass=
# record current working directory
PWD=`pwd`
# test for required commands
for c in 'wget' 'sequel'; do
command -v $c >/dev/null && continue || { echo "$c command not found."; exit 1; }
done
# display variables
echo
echo "doc_root: $doc_root"
echo "ftp_domain: $ftp_domain"
echo "ftp_host: $ftp_host"
echo "ftp_user: $ftp_user"
echo "ftp_pass: $ftp_pass"
echo "db_remote_data: $db_remote_data"
echo "db_remote_host: $db_remote_host"
echo "db_remote_user: $db_remote_user"
echo "db_remote_pass: $db_remote_pass"
echo "db_local_data: $db_local_data"
echo "db_local_host: $db_local_host"
echo "db_local_user: $db_local_user"
echo "db_local_pass: $db_local_pass"
echo
# http://www.linuxcommand.org/wss0150.php
PROGNAME=$(basename $0)
function error_exit
{
echo "${PROGNAME}[$1]: ${2:-"Unknown Error"}" 1>&2
cd $PWD
exit 1
}
# change to document root
cd $doc_root || error_exit $LINENO "error changing to document root '$doc_root'"
# mirror media/ files
echo
echo 'copy media/...'
wget -q -r -nH --cut-dirs=1 "ftp://$ftp_user:$ftp_pass@$ftp_host/$ftp_domain/htdocs/media"
if [ $db_local_type='mysql' ]; then
# drop and create the database
echo
echo 'drop and create database...'
mysql -u"$db_local_user" -p"$db_local_pass" -e"DROP DATABASE $db_local_data; CREATE DATABASE $db_local_data DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;"
# copy the databaes
echo
echo 'copy database...'
sequel -C "$db_remote_type://$db_remote_user:$db_remote_pass@$db_remote_host/$db_remote_data" "mysql://$db_local_user:$db_local_pass@$db_local_host/$db_local_data"
fi
if [ $db_local_type='sqlite' ]; then
rm -Rf "$doc_root/data/${db_local_data}-data.sqlite"
sequel -C "$db_remote_type://$db_remote_user:$db_remote_pass@$db_remote_host/$db_remote_data" "sqlite:$doc_root/data/${db_local_data}-data.sqlite"
fi
# change back to original working directory
cd $PWD
# done
echo
echo 'done'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment