#!/bin/bash SOURCE_DIR="" BACKUP_DIR="" OPT= COMMAND=$0 function print_usage { printf "\nUsage:\n" printf " $COMMAND \n" printf " $COMMAND -s -b \n" printf " $COMMAND -b -s \n" printf "\nExamples:\n" printf " $COMMAND ../data/ ../backups/\n" printf " $COMMAND -s ../data/ -b ../backups/\n" printf " $COMMAND -b ../backups/ -s ../data/\n" printf "\nNotes:\n" printf " - must exist and be a directory\n" printf " - will be created if it does not exist\n" printf " - The script copies ALL regular files recursively and preserves subfolders.\n" exit 1 } function check_args { if [[ $# -eq 2 && $1 != "-"* && $2 != "-"* ]]; then SOURCE_DIR="$1" BACKUP_DIR="$2" BACKUP_DIR="$2" elif [[ $# -eq 4 ]]; then while getopts "s:b:" OPT; do case ${OPT} in s) SOURCE_DIR="$OPTARG" ;; b) BACKUP_DIR="$OPTARG" ;; *) print_usage ;; esac done shift $((OPTIND - 1)) else print_usage fi if [[ -z "$SOURCE_DIR" || -z "$BACKUP_DIR" ]]; then printf "\nError: Both source and backup directories must be specified.\n" print_usage fi if [[ ! -d "$SOURCE_DIR" ]]; then printf "\n\"$SOURCE_DIR\" not a directory\n" print_usage fi } function backup_files { if [[ ! -d "$BACKUP_DIR" ]]; then mkdir -p "$BACKUP_DIR" if [ $? -ne 0 ]; then printf "\nCannot create backup directory at \"$BACKUP_DIR\"\n" print_usage fi fi FILE_COUNT=0 for FILE in "$SOURCE_DIR"/*.txt; do if [ -f "$SOURCE_DIR/$FILE" ]; then cp "$SOURCE_DIR/$FILE" "$BACKUP_DIR/" (( FILE_COUNT++ )) fi done } check_args "$@" backup_files printf "\nBackup Operation Summary\n" printf "Source Directory: $SOURCE_DIR\n" printf "Backup Directory: $BACKUP_DIR\n" printf "Total Files Copied: $FILE_COUNT\n"