mirror of
https://github.com/natelandau/shell-scripting-templates.git
synced 2025-11-10 06:03:47 -05:00
Tweaks to syncTemplate.sh
This commit is contained in:
@@ -8,6 +8,17 @@
|
|||||||
#
|
#
|
||||||
# ##################################################
|
# ##################################################
|
||||||
|
|
||||||
|
# scriptPath
|
||||||
|
# ------------------------------------------------------
|
||||||
|
# This function will populate the variable SOURCEPATH with the
|
||||||
|
# full path of the script being run.
|
||||||
|
# Note: The function must be run within the script before using
|
||||||
|
# the variable
|
||||||
|
# ------------------------------------------------------
|
||||||
|
function scriptPath() {
|
||||||
|
SCRIPTPATH=$( cd "$( dirname "$0" )" && pwd )
|
||||||
|
}
|
||||||
|
|
||||||
# readFile
|
# readFile
|
||||||
# ------------------------------------------------------
|
# ------------------------------------------------------
|
||||||
# Function to read a line from a file.
|
# Function to read a line from a file.
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symli
|
|||||||
SOURCE="$(readlink "$SOURCE")"
|
SOURCE="$(readlink "$SOURCE")"
|
||||||
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||||
done
|
done
|
||||||
SCRIPTPATH="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
SOURCEPATH="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||||
|
|
||||||
# Write the list of utility files to be sourced
|
# Write the list of utility files to be sourced
|
||||||
FILES="
|
FILES="
|
||||||
@@ -26,8 +26,8 @@ FILES="
|
|||||||
# Source the Utility Files
|
# Source the Utility Files
|
||||||
for file in $FILES
|
for file in $FILES
|
||||||
do
|
do
|
||||||
if [ -f "$SCRIPTPATH/$file" ]; then
|
if [ -f "$SOURCEPATH/$file" ]; then
|
||||||
source "$SCRIPTPATH/$file"
|
source "$SOURCEPATH/$file"
|
||||||
else
|
else
|
||||||
e_error "$file does not exist. Exiting"
|
e_error "$file does not exist. Exiting"
|
||||||
Exit 1
|
Exit 1
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ CONFIG="../etc/$SCRIPTNAME.cfg"
|
|||||||
# HELP
|
# HELP
|
||||||
# When -h is passed to the script, this will display inline help
|
# When -h is passed to the script, this will display inline help
|
||||||
function HELP () {
|
function HELP () {
|
||||||
echo -e "\nHelp for $SCRIPTNAME"
|
e_bold "\nHelp for $SCRIPTNAME"
|
||||||
echo -e "This script will give you the option of using rsync"
|
echo -e "This script will give you the option of using rsync"
|
||||||
echo -e "or Unison. Rsync is for one-way syncing, Unison is for"
|
echo -e "or Unison. Rsync is for one-way syncing, Unison is for"
|
||||||
echo -e "two-way syncing.\n"
|
echo -e "two-way syncing.\n"
|
||||||
@@ -54,8 +54,9 @@ function HELP () {
|
|||||||
echo -e "what information is written in the config file, this script"
|
echo -e "what information is written in the config file, this script"
|
||||||
echo -e "will perform different behavior.\n"
|
echo -e "will perform different behavior.\n"
|
||||||
echo -e "USAGE:"
|
echo -e "USAGE:"
|
||||||
echo -e " 1) IMPORTANT: Copy this script and rename it for your purpose before running."
|
echo -e " 1) Copy this script and rename it for your purpose before running."
|
||||||
echo -e " 2) Run the script. This will create a blank config file for you and then exit."
|
echo -e " The script will do this for you when run."
|
||||||
|
echo -e " 2) Run the new script. This will create a blank config file for you and then exit."
|
||||||
echo -e " 3) Enter your information within the config file"
|
echo -e " 3) Enter your information within the config file"
|
||||||
echo -e " 4) Run the script again.\n"
|
echo -e " 4) Run the script again.\n"
|
||||||
echo -e "This script requires a config file located at: \"$CONFIG\""
|
echo -e "This script requires a config file located at: \"$CONFIG\""
|
||||||
@@ -68,6 +69,40 @@ function HELP () {
|
|||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# READ OPTIONS
|
||||||
|
# Reads the options passed to the script
|
||||||
|
# from the command line
|
||||||
|
# ------------------------
|
||||||
|
while getopts "hnz" opt; do
|
||||||
|
case $opt in
|
||||||
|
h) # show help
|
||||||
|
HELP
|
||||||
|
;;
|
||||||
|
n) # Show progress in terminal
|
||||||
|
DRYRUN="n"
|
||||||
|
;;
|
||||||
|
z) # Compress Data
|
||||||
|
COMPRESS="z"
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
HELP
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Create new copy of the script if template is being executed
|
||||||
|
function newCopy() {
|
||||||
|
scriptPath
|
||||||
|
if [ "$SCRIPTNAME" = "SyncTemplate.sh" ]; then
|
||||||
|
e_bold "name your new script:"
|
||||||
|
read newname
|
||||||
|
cp "$SCRIPTPATH"/"$SCRIPTNAME" "$SCRIPTPATH"/"$newname"
|
||||||
|
e_success "$newname created."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function configFile() {
|
||||||
# Here we source the Config file or create a new one if none exists.
|
# Here we source the Config file or create a new one if none exists.
|
||||||
if is_file "$CONFIG"; then
|
if is_file "$CONFIG"; then
|
||||||
source "$CONFIG"
|
source "$CONFIG"
|
||||||
@@ -93,12 +128,6 @@ cat >"$CONFIG" <<EOL
|
|||||||
# Set the METHOD variable to either 'unison' or 'rsync'
|
# Set the METHOD variable to either 'unison' or 'rsync'
|
||||||
METHOD=""
|
METHOD=""
|
||||||
|
|
||||||
# Directories To Sync
|
|
||||||
# ---------------------------
|
|
||||||
# These are the COMPLETE paths two directories that will be synced.
|
|
||||||
# Be sure to include trailing slashes on directories.
|
|
||||||
SOURCEDIRECTORY=""
|
|
||||||
TARGETDIRECTORY=""
|
|
||||||
|
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
# Network Volume Mounting
|
# Network Volume Mounting
|
||||||
@@ -114,10 +143,17 @@ MOUNTPOINT=""
|
|||||||
# REMOTEVOLUME is the directory that the drive should be mounted
|
# REMOTEVOLUME is the directory that the drive should be mounted
|
||||||
# into on the local computer. Typically this is in the /Volumes/ dir.
|
# into on the local computer. Typically this is in the /Volumes/ dir.
|
||||||
# and should be named the same as the mountname in the MOUNTPOINT.
|
# and should be named the same as the mountname in the MOUNTPOINT.
|
||||||
# Use the complete path, not a relative path
|
# Use a complete path, not a relative path without a trailing slash.
|
||||||
REMOTEVOLUME=""
|
REMOTEVOLUME=""
|
||||||
|
|
||||||
|
|
||||||
|
# Directories To Sync
|
||||||
|
# ---------------------------
|
||||||
|
# These are the COMPLETE paths two directories that will be synced.
|
||||||
|
# Be sure to include trailing slashes on directories.
|
||||||
|
SOURCEDIRECTORY=""
|
||||||
|
TARGETDIRECTORY=""
|
||||||
|
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
# UNISON PREFERENCES
|
# UNISON PREFERENCES
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
@@ -142,6 +178,8 @@ UNISONPROFILE=""
|
|||||||
# Anything listed within this file will be ignored during sync.
|
# Anything listed within this file will be ignored during sync.
|
||||||
EXCLUDE=""
|
EXCLUDE=""
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------
|
||||||
# ADDITIONAL OPTIONS
|
# ADDITIONAL OPTIONS
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
|
|
||||||
@@ -159,49 +197,36 @@ PUSHOVERNOTIFY="false"
|
|||||||
# Leave blank if not needed.
|
# Leave blank if not needed.
|
||||||
CANONICALHOST=""
|
CANONICALHOST=""
|
||||||
EOL
|
EOL
|
||||||
e_success "Config file created. Edit the values before running this script again. Exiting."
|
e_success "Config file created. Edit the values before running this script again."
|
||||||
|
e_arrow "The file is located at: $CONFIG"
|
||||||
|
echo "Exiting."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# READ OPTIONS
|
|
||||||
# Reads the options passed to the script
|
|
||||||
# from the command line
|
|
||||||
# ------------------------
|
|
||||||
while getopts "hnz" opt; do
|
|
||||||
case $opt in
|
|
||||||
h) # show help
|
|
||||||
HELP
|
|
||||||
;;
|
|
||||||
n) # Show progress in terminal
|
|
||||||
DRYRUN="n"
|
|
||||||
;;
|
|
||||||
z) # Compress Data
|
|
||||||
COMPRESS="z"
|
|
||||||
;;
|
|
||||||
\?)
|
|
||||||
HELP
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# HostCheck
|
# HostCheck
|
||||||
# Confirm we can run this script. If a canonical host is set in
|
# Confirm we can run this script. If a canonical host is set in
|
||||||
# the config file we check it here.
|
# the config file we check it here.
|
||||||
|
function hostCheck() {
|
||||||
if [ "$THISHOST" = "$CANONICALHOST" ]; then
|
if [ "$THISHOST" = "$CANONICALHOST" ]; then
|
||||||
echo "$NOW - Script was not run since we were on the wrong host" >> "$LOGFILE"
|
echo "$NOW - Script was not run since we were on the wrong host" >> "$LOGFILE"
|
||||||
die "We are currently on $THISHOST and can not proceed. Be sure to run this script on the non-canonical host."
|
die "We are currently on $THISHOST and can not proceed. Be sure to run this script on the non-canonical host."
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# MethodCheck
|
# MethodCheck
|
||||||
# Confirm we have either Unison or Rsync specified
|
# Confirm we have either Unison or Rsync specified
|
||||||
# in the config file. Exit if not
|
# in the config file. Exit if not
|
||||||
|
function MethodCheck() {
|
||||||
if [ "$METHOD" != "rsync" ] && [ "$METHOD" != "unison" ]; then
|
if [ "$METHOD" != "rsync" ] && [ "$METHOD" != "unison" ]; then
|
||||||
echo "$NOW - Script aborted without a method specified in the config file." >> "$LOGFILE"
|
echo "$NOW - Script aborted without a method specified in the config file." >> "$LOGFILE"
|
||||||
die "We can not continue. Please specify a sync method in the config file."
|
die "We can not continue. Please specify a sync method in the config file."
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function mainScript() {
|
||||||
# Time the script by logging the start time
|
# Time the script by logging the start time
|
||||||
STARTTIME=$(date +"%s")
|
STARTTIME=$(date +"%s")
|
||||||
|
|
||||||
@@ -210,6 +235,7 @@ echo -e "-----------------------------------------------------" >> "$LOGFILE"
|
|||||||
echo -e "$NOW - $SCRIPTNAME Begun" >> "$LOGFILE"
|
echo -e "$NOW - $SCRIPTNAME Begun" >> "$LOGFILE"
|
||||||
echo -e "-----------------------------------------------------\n" >> "$LOGFILE"
|
echo -e "-----------------------------------------------------\n" >> "$LOGFILE"
|
||||||
|
|
||||||
|
|
||||||
if [ "$NEEDMOUNT" = "true" ] || [ "$NEEDMOUNT" = "TRUE" ]; then
|
if [ "$NEEDMOUNT" = "true" ] || [ "$NEEDMOUNT" = "TRUE" ]; then
|
||||||
# Mount AFP volume
|
# Mount AFP volume
|
||||||
if is_not_dir "$REMOTEVOLUME"; then
|
if is_not_dir "$REMOTEVOLUME"; then
|
||||||
@@ -225,7 +251,9 @@ if [ "$NEEDMOUNT" = "true" ] || [ "$NEEDMOUNT" = "TRUE" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Test for source directories.
|
# Test for source directories.
|
||||||
# If the don't exist we can't continue
|
# If they don't exist we can't continue
|
||||||
|
|
||||||
|
# test for target
|
||||||
if is_dir "$TARGETDIRECTORY"; then
|
if is_dir "$TARGETDIRECTORY"; then
|
||||||
e_success "$TARGETDIRECTORY exists"
|
e_success "$TARGETDIRECTORY exists"
|
||||||
else
|
else
|
||||||
@@ -235,11 +263,11 @@ else
|
|||||||
rm -r "$REMOTEVOLUME"
|
rm -r "$REMOTEVOLUME"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo -e "$NOW - Script aborted since $TARGETDIRECTORY was not found. Exited.\n" >> "$LOGFILE"
|
echo -e "$NOW - Script aborted since target dir: $TARGETDIRECTORY was not found. Exited.\n" >> "$LOGFILE"
|
||||||
die "$TARGETDIRECTORY does not exist. Exiting."
|
die "target directory: $TARGETDIRECTORY does not exist. Exiting."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Test for local directory
|
# Test for source directory
|
||||||
if is_dir "$SOURCEDIRECTORY"; then
|
if is_dir "$SOURCEDIRECTORY"; then
|
||||||
e_success "$SOURCEDIRECTORY exists"
|
e_success "$SOURCEDIRECTORY exists"
|
||||||
else
|
else
|
||||||
@@ -249,8 +277,8 @@ else
|
|||||||
rm -r "$REMOTEVOLUME"
|
rm -r "$REMOTEVOLUME"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo -e "$NOW - Script aborted since $SOURCEDIRECTORY was not found. Exited.\n" >> "$LOGFILE"
|
echo -e "$NOW - Script aborted since source dir: $SOURCEDIRECTORY was not found. Exited.\n" >> "$LOGFILE"
|
||||||
die "$SOURCEDIRECTORY does not exist. Exiting."
|
die "source directory: $SOURCEDIRECTORY does not exist. Exiting."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Time to sync
|
# Time to sync
|
||||||
@@ -305,3 +333,10 @@ echo "$NOW - $SCRIPTNAME completed in $(convertsecs $TOTALTIME)" >> "$LOGFILE"
|
|||||||
echo -e "-----------------------------------------------------\n" >> "$LOGFILE"
|
echo -e "-----------------------------------------------------\n" >> "$LOGFILE"
|
||||||
|
|
||||||
e_success "$NOW - $SCRIPTNAME completed in $(convertsecs $TOTALTIME)"
|
e_success "$NOW - $SCRIPTNAME completed in $(convertsecs $TOTALTIME)"
|
||||||
|
}
|
||||||
|
|
||||||
|
newCopy
|
||||||
|
configFile
|
||||||
|
hostCheck
|
||||||
|
MethodCheck
|
||||||
|
mainScript
|
||||||
Reference in New Issue
Block a user