#!/bin/bash do { #//////////////////////////////////// # DietPi Sync # #//////////////////////////////////// # Created by Daniel Knight / daniel.knight@dietpi.com / dietpi.com # #//////////////////////////////////// # # Info: # - filename /DietPi/dietpi/dietpi-sync # - Allows user to sync a Source and Target directory. # # Usage: # - /DietPi/dietpi/dietpi-sync 0 = Menu # - /DietPi/dietpi/dietpi-sync 1 = Sync #//////////////////////////////////// #Grab Input (valid interger) setvar INPUT = '0' if [[ $1 =~ ^-?[0-9]+$ ]] { setvar INPUT = "$1" } #Import DietPi-Globals --------------------------------------------------------------- source /DietPi/dietpi/func/dietpi-globals G_CHECK_ROOT_USER G_CHECK_ROOTFS_RW export G_PROGRAM_NAME='DietPi-Sync' #Import DietPi-Globals --------------------------------------------------------------- #///////////////////////////////////////////////////////////////////////////////////// # MENUS #///////////////////////////////////////////////////////////////////////////////////// setvar WHIP_BACKTITLE = ''DietPi-Sync'' setvar WHIP_TITLE = '''' setvar CHOICE = '0' setvar OPTION = '0' setvar TARGETMENUID = '0' setvar FTP_MOUNT_AVAILABLE = '0' setvar FTP_MOUNT_TEXT = ''Not available'' setvar SAMBA_MOUNT_AVAILABLE = '0' setvar SAMBA_MOUNT_TEXT = ''Not available'' setvar SYNC_DRY_RUN = '0' setvar SYNC_MODE_TEXT = ''Disabled'' setvar SYNC_COMPRESSION_TEXT = ''Disabled'' setvar SYNC_CRONDAILY_TEXT = ''Disabled'' #TARGETMENUID=0 proc Menu_Main { setvar SYNC_MODE_TEXT = ''Disabled'' if (( $SYNC_DELETE_MODE == 1 )) { setvar SYNC_MODE_TEXT = ''Enabled'' } setvar SYNC_COMPRESSION_TEXT = ''Disabled'' if (( $SYNC_COMPRESSION == 1 )) { setvar SYNC_COMPRESSION_TEXT = ''Enabled'' } setvar SYNC_CRONDAILY_TEXT = ''Disabled'' if (( $SYNC_CRONDAILY == 1 )) { setvar SYNC_CRONDAILY_TEXT = ''Enabled'' } local sync_last_completed='No previous sync found in target directory.' if test -f "$FP_TARGET/$SYNC_STATS_FILENAME" { setvar sync_last_completed = $(grep '^Sync completed' "$FP_TARGET/$SYNC_STATS_FILENAME" | tail -1 | awk '{print $3}') } setvar WHIP_TITLE = ''DietPi-Sync'' setvar OPTION = $(whiptail --title "$WHIP_TITLE" --menu "Source location:\n $FP_SOURCE\n\nTarget location:\n $FP_TARGET\n\nMost recent successful sync date:\n $sync_last_completed" --cancel-button "Exit" --backtitle "$WHIP_BACKTITLE" 23 73 8 \ "Help" "What does DietPi-Sync do?" \ "Source Location" "Change the Source directory." \ "Target Location" "Change the Target directory." \ "Delete Mode" "$SYNC_MODE_TEXT" \ "Compression" "$SYNC_COMPRESSION_TEXT" \ "Sync: Daily" "$SYNC_CRONDAILY_TEXT" \ "Sync: Dry Run" "Run a test Sync without modifying any data." \ "Sync: Now" "Sync the Source location to the Target location." 3>&1 1>&2 2>&3) setvar CHOICE = ""$? if (( $CHOICE == 0 )) { case (OPTION) { "Source Location" { setvar TARGETMENUID = '2' } "Target Location" { setvar TARGETMENUID = '1' } Help { whiptail --title "DietPi-Sync Help" --msgbox "DietPi-Sync is a program that allows you to duplicate a directory from one location (Source) to another (Target).\n\nFor example: If we want to duplicate (sync) the data on our external USB HDD to another location, we simply select the USB HDD as the source, then, select a target location. The target location can be anything from a networked samba fileserver, or even a FTP server.\n\nIf you would like to test a sync without modifiying any data, simply select Dry Run.\n\nMore information:\n - http://dietpi.com/phpbb/viewtopic.php?f=8&t=5&p=256#p256" --backtitle $WHIP_BACKTITLE 19 75 } "Delete Mode" { setvar TARGETMENUID = '3' } Compression { setvar TARGETMENUID = '4' } "Sync: Daily" { setvar TARGETMENUID = '5' } "Sync: Dry Run" { setvar WHIP_TITLE = '' Test Dry Run Sync? '' whiptail --title $WHIP_TITLE --yesno "Source location:\n$FP_SOURCE/*\n\nTarget location:\n$FP_TARGET/*\n\nThis is a Dry Run for testing. No data will be modified.\n\nDo you wish to continue?" --yes-button "Ok" --no-button "Back" --defaultno --backtitle $WHIP_BACKTITLE 16 72 setvar CHOICE = ""$? if (( $CHOICE == 0 )) { setvar SYNC_DRY_RUN = '1' Run_Sync } } "Sync: Now" { setvar WHIP_TITLE = '' Start Sync? '' whiptail --title $WHIP_TITLE --yesno "Source location:\n$FP_SOURCE/*\n\nTarget location:\n$FP_TARGET/*\n\nA copy of all the files and folders inside your Source location, will be created at the Target location.\n\nDo you wish to continue?" --yes-button "Ok" --no-button "Back" --defaultno --backtitle $WHIP_BACKTITLE 16 72 setvar CHOICE = ""$? if (( $CHOICE == 0 )) { setvar SYNC_DRY_RUN = '0' Run_Sync } } } } else { Menu_Exit } } proc Menu_Exit { setvar WHIP_TITLE = '' Exit DietPi-Sync? '' whiptail --title $WHIP_TITLE --yesno $WHIP_TITLE --yes-button "Ok" --no-button "Back" --defaultno --backtitle $WHIP_BACKTITLE 10 50 setvar CHOICE = ""$? #Exit if (( $CHOICE == 0 )) { setvar TARGETMENUID = '-1' } } #TARGETMENUID=1 && TARGETMENUID=2 proc Menu_Set_Directories { #TARGETMENUID #2=Source | 1=Target local current_directory="$FP_TARGET" local current_mode_text="Target" local whip_description_text="Please select the $current_mode_text location.\nA copy of all the files and folders in the Source location will be created here.\n\nCurrent Target location:\n$FP_TARGET" setvar WHIP_TITLE = ''Select your Sync Target location'' if (( $TARGETMENUID == 2 )) { setvar current_directory = "$FP_SOURCE" setvar current_mode_text = ""Source"" setvar whip_description_text = ""Please select the $current_mode_text location.\nA copy of all the files and folder in this Source location, will be created at the Target location.\n\nCurrent Source location:\n$FP_SOURCE"" setvar WHIP_TITLE = ''Select your Sync Source location'' } Check_Available_DietPi_Mounts setvar OPTION = $(whiptail --title "$WHIP_TITLE" --menu "$whip_description_text" --cancel-button "Back" --backtitle "$WHIP_BACKTITLE" 17 75 4 \ "Manual" "Manually type your $current_mode_text directory." \ "List" "Select from a list of available mounts/drives" \ "Samba Client" "$SAMBA_MOUNT_TEXT" \ "FTP Client" "$FTP_MOUNT_TEXT" 3>&1 1>&2 2>&3) setvar CHOICE = ""$? if (( $CHOICE == 0 )) { case (OPTION) { List { /DietPi/dietpi/dietpi-drive_manager 1 local return_value=$(cat /tmp/dietpi-drive_manager_selmnt) if test $return_value = "/" { setvar return_value = ''/mnt'' } if (( $TARGETMENUID == 2 )) { setvar FP_SOURCE = "$return_value" } else { setvar FP_TARGET = ""$return_value/dietpi-sync"" } } Manual { Input_User_Directory } "Samba Client" { if (( $SAMBA_MOUNT_AVAILABLE == 1 )) { if (( $TARGETMENUID == 2 )) { setvar FP_SOURCE = "$FP_SAMBA_MOUNT" } else { setvar FP_TARGET = ""$FP_SAMBA_MOUNT/dietpi-sync"" } } else { Prompt_Setup_Samba_Mount if (( $TARGETMENUID == 2 )) { setvar FP_SOURCE = "$current_directory" } else { setvar FP_TARGET = "$current_directory" } } } "FTP Client" { if (( $FTP_MOUNT_AVAILABLE == 1 )) { if (( $TARGETMENUID == 2 )) { setvar FP_SOURCE = "$FP_FTP_MOUNT" } else { setvar FP_TARGET = ""$FP_FTP_MOUNT/dietpi-sync"" } } else { Prompt_Setup_FTP_Mount if (( $TARGETMENUID == 2 )) { setvar FP_SOURCE = "$current_directory" } else { setvar FP_TARGET = "$current_directory" } } } } } else { #Return to main menu setvar TARGETMENUID = '0' } } #TARGETMENUID=3 proc Menu_Set_Sync_Delete_Mode { setvar WHIP_TITLE = '' Sync Delete Mode '' setvar OPTION = $(whiptail --title "$WHIP_TITLE" --menu "Please select the Sync delete mode.\n\nDisabled: (safe)\nIf files and folders exist in the Target location, that are not in the Source, they will be left alone.\n\nEnabled: (WARNING, if in doubt, DO NOT enable)\nAn exact copy of the Source location will be created at the Target location. If files are in the Target location that dont exist in the Source, they will be DELETED." --cancel-button "Back" --default-item "$SYNC_MODE_TEXT" --backtitle "$WHIP_BACKTITLE" 19 75 2 \ "Disabled" "Ignores data that exists at Target Location and not Source." \ "Enabled" "Deletes data at Target location if not in Source Location." 3>&1 1>&2 2>&3) setvar CHOICE = ""$? if (( $CHOICE == 0 )) { case (OPTION) { Disabled { setvar SYNC_DELETE_MODE = '0' } Enabled { setvar SYNC_DELETE_MODE = '1' } } } #Return to main menu setvar TARGETMENUID = '0' } #TARGETMENUID=4 proc Menu_Set_Compression { setvar WHIP_TITLE = '' Sync Compression Mode '' setvar OPTION = $(whiptail --title "$WHIP_TITLE" --menu "Please select the compression mode.\n\nDisabled:\nNo compression will be used during data transfer.\n\nEnabled:\nData will be compressed when its being transfered. Useful for slow connections, however, its CPU intensive." --cancel-button "Back" --default-item "$SYNC_COMPRESSION_TEXT" --backtitle "$WHIP_BACKTITLE" 17 75 2 \ "Disabled" "Transfer data in its original state." \ "Enabled" "Compress the data during transfer." 3>&1 1>&2 2>&3) setvar CHOICE = ""$? if (( $CHOICE == 0 )) { case (OPTION) { Disabled { setvar SYNC_COMPRESSION = '0' } Enabled { setvar SYNC_COMPRESSION = '1' } } } #Return to main menu setvar TARGETMENUID = '0' } #TARGETMENUID=5 proc Menu_Set_CronDaily { setvar WHIP_TITLE = '' Sync Cron Daily '' setvar OPTION = $(whiptail --title "$WHIP_TITLE" --menu "Disabled:\nThe user must manually sync using dietpi-sync.\n\nEnabled:\nA cron job will be created that automatically runs dietpi-sync, once a day.\n\n(NOTICE):\nBefore enabling this feature, please run a test sync (Dry Run) to verify what will happen." --cancel-button "Back" --default-item "$SYNC_CRONDAILY_TEXT" --backtitle "$WHIP_BACKTITLE" 19 75 2 \ "Disabled" "Manual sync." \ "Enabled" "Automatically sync once a day." 3>&1 1>&2 2>&3) setvar CHOICE = ""$? if (( $CHOICE == 0 )) { case (OPTION) { Disabled { setvar SYNC_CRONDAILY = '0' } Enabled { setvar SYNC_CRONDAILY = '1' } } } #Return to main menu setvar TARGETMENUID = '0' } proc Input_User_Directory { #TARGETMENUID #2=Source | 1=Target #Target if (( $TARGETMENUID == 1 )) { setvar OPTION = $(whiptail --inputbox "Please enter the filepath to your Target directory. \neg: /mnt/target" 8 70 "$FP_TARGET" --title "Manual sync directory" --backtitle "$WHIP_BACKTITLE" 3>&1 1>&2 2>&3) setvar CHOICE = ""$? if (( $CHOICE == 0 )) { setvar FP_TARGET = "$OPTION" } #Source } elif (( $TARGETMENUID == 2 )) { setvar OPTION = $(whiptail --inputbox "Please enter the filepath to your Source directory. \neg: /mnt/source" 8 70 "$FP_SOURCE" --title "Manual sync directory" --backtitle "$WHIP_BACKTITLE" 3>&1 1>&2 2>&3) setvar CHOICE = ""$? if (( $CHOICE == 0 )) { setvar FP_SOURCE = "$OPTION" } } } proc Prompt_Setup_Samba_Mount { whiptail --title "Not available. Setup Now?" --yesno "$SAMBA_MOUNT_TEXT\n\nWould you like to run DietPi-Config and setup your Samba Client Mount now?" --yes-button "Ok" --no-button "Back" --defaultno --backtitle $WHIP_BACKTITLE 11 70 setvar CHOICE = ""$? if (( $CHOICE == 0 )) { #Run configure /DietPi/dietpi/dietpi-config 16 1 } } proc Prompt_Setup_FTP_Mount { whiptail --title "Not available. Setup Now?" --yesno "$FTP_MOUNT_TEXT\n\nWould you like to run DietPi-Config and setup your FTP Client Mount now?" --yes-button "Ok" --no-button "Back" --defaultno --backtitle $WHIP_BACKTITLE 11 70 setvar CHOICE = ""$? if (( $CHOICE == 0 )) { #Run configure /DietPi/dietpi/dietpi-config 16 1 } } #///////////////////////////////////////////////////////////////////////////////////// # Sync System #///////////////////////////////////////////////////////////////////////////////////// #LOGFILE setvar LOGFILE = ''/var/log/dietpi-sync.log'' #Sync Filepaths setvar FP_SOURCE = ''/mnt/Source'' setvar FP_TARGET = ''/mnt/Target'' #DietPi Mounts setvar FP_FTP_MOUNT = ''/mnt/ftp_client'' setvar FP_SAMBA_MOUNT = ''/mnt/samba'' #file applied to successful Sync (stored in $FP_TARGET/$SYNC_STATS_FILENAME) setvar SYNC_STATS_FILENAME = ''.dietpi-sync_stats'' #Exclude/include file setvar FP_EXCLUDE_GLOBAL = ''/tmp/.dietpi-sync_exclude'' setvar FP_INCLUDE_GLOBAL = ''/tmp/.dietpi-sync_include'' setvar FP_EXCLUDE_USER = ''/DietPi/dietpi/.dietpi-sync_exclude'' setvar FP_INCLUDE_USER = ''/DietPi/dietpi/.dietpi-sync_include'' #Extra options setvar SYNC_DELETE_MODE = '0' setvar SYNC_COMPRESSION = '0' setvar SYNC_CRONDAILY = '0' proc Create_Exclude_File { #Generate new rm $FP_EXCLUDE_GLOBAL &> /dev/null #Global - Folders echo -e $FP_TARGET >> "$FP_EXCLUDE_GLOBAL" echo -e "/boot/dietpi/*" >> "$FP_EXCLUDE_GLOBAL" echo -e "/DietPi/*" >> "$FP_EXCLUDE_GLOBAL" echo -e "/dev/*" >> "$FP_EXCLUDE_GLOBAL" echo -e "/proc/*" >> "$FP_EXCLUDE_GLOBAL" echo -e "/sys/*" >> "$FP_EXCLUDE_GLOBAL" echo -e "/tmp/*" >> "$FP_EXCLUDE_GLOBAL" echo -e "/run/*" >> "$FP_EXCLUDE_GLOBAL" #Global - Files echo -e $LOGFILE >> "$FP_EXCLUDE_GLOBAL" echo -e $FP_DIETPISYNC_SETTINGS >> "$FP_EXCLUDE_GLOBAL" echo -e $FP_EXCLUDE_USER >> "$FP_EXCLUDE_GLOBAL" echo -e $FP_INCLUDE_USER >> "$FP_EXCLUDE_GLOBAL" echo -e $SYNC_STATS_FILENAME >> "$FP_EXCLUDE_GLOBAL" echo -e "/var/swap" >> "$FP_EXCLUDE_GLOBAL" echo -e "*.tmp" >> "$FP_EXCLUDE_GLOBAL" # - MS Windows specific echo -e "Thumbs.db" >> "$FP_EXCLUDE_GLOBAL" echo -e "desktop.ini" >> "$FP_EXCLUDE_GLOBAL" echo -e "SyncToy*" >> "$FP_EXCLUDE_GLOBAL" # MS SyncToy echo -e "System Volume Information" >> "$FP_EXCLUDE_GLOBAL" # - causes error code 23 (permission denied) #Add users additional list if test -f $FP_EXCLUDE_USER { cat $FP_EXCLUDE_USER >> "$FP_EXCLUDE_GLOBAL" } } proc Create_Include_File { #Generate new rm $FP_INCLUDE_GLOBAL &> /dev/null #Global - Folders echo -e "" > "$FP_INCLUDE_GLOBAL" #Global - Files #Add users additional list if test -f $FP_INCLUDE_USER { cat $FP_INCLUDE_USER >> "$FP_INCLUDE_GLOBAL" } } proc Services_Stop { /DietPi/dietpi/dietpi-services stop } proc Services_Start { /DietPi/dietpi/dietpi-services start } proc Banner_Start { local mode='Sync' #Dry Run? if (( $SYNC_DRY_RUN == 1 )) { setvar mode = ''Dry Run'' } G_DIETPI-NOTIFY 3 DietPi-Sync $mode } proc Run_Sync { Banner_Start #Generate Target dir. mkdir -p $FP_TARGET #Error: Folder not found if test ! -d $FP_TARGET { if (( $G_USER_INPUTS )) { whiptail --title "Sync failed." --msgbox "Unable to create Target directory $FP_TARGET" --backtitle $WHIP_BACKTITLE 10 60 } #Error: Rsync is already running } elif (( $(ps aux | grep -ci -m1 "[r]sync") == 1 )) { echo -e "Sync failed: $(date +"%d-%m-%Y_%H%M"). Rsync is already running." >> "$FP_TARGET/$SYNC_STATS_FILENAME" #Menu if (( $G_USER_INPUTS )) { whiptail --title "Sync Error" --msgbox "A sync job could not be started as rsync is already running." --backtitle $WHIP_BACKTITLE 13 60 } #Start sync } else { #Generate Exclude/Include lists Create_Exclude_File Create_Include_File #Archive mode local rync_options="-a" #verbose setvar rync_options = ""v"" #Keep partial files + Progress. (eg: if file is interupted, it will resume where it left off, rather than resending the whole file. setvar rync_options = ""P"" #Prefer IPv4 setvar rync_options = ""4"" #Compression? if (( $SYNC_COMPRESSION == 1 )) { setvar rync_options = ""z"" } #Dry Run? if (( $SYNC_DRY_RUN == 1 )) { setvar rync_options = ""n"" } #Delete mode? if (( $SYNC_DELETE_MODE == 1 )) { setvar rync_options = "" --delete"" } #Write new logfile echo -e "DietPi-Sync Log File.\n$(date +%d-%m-%Y_%H%M)\nSYNC_DRY_RUN=$SYNC_DRY_RUN\n\n" > "$LOGFILE" #Services_Stop #Sync rsync $rync_options --log-file=$LOGFILE --exclude-from="$FP_EXCLUDE_GLOBAL" --include-from="$FP_INCLUDE_GLOBAL" "$FP_SOURCE"/ "$FP_TARGET"/ #Services_Start #Success if (( $? == 0 )) { echo -e "Sync completed: $(date +"%d-%m-%Y_%H%M")" >> "$FP_TARGET/$SYNC_STATS_FILENAME" #Menu if (( $G_USER_INPUTS )) { if (( $SYNC_DRY_RUN == 0 )) { whiptail --title "Sync completed" --msgbox "$FP_SOURCE\n\nHas been synced to:\n$FP_TARGET\n\nLog file: $LOGFILE" --backtitle $WHIP_BACKTITLE 13 60 } else { whiptail --title "Dry Run Sync completed" --msgbox "$FP_SOURCE\n\nHas been synced with a Dry Run (NO modifications) to:\n$FP_TARGET\n\nLog file: $LOGFILE" --backtitle $WHIP_BACKTITLE 13 60 } } #Failed } else { echo -e "Sync failed: $(date +"%d-%m-%Y_%H%M")" >> "$FP_TARGET/$SYNC_STATS_FILENAME" #Menu if (( $G_USER_INPUTS )) { if (( $SYNC_DRY_RUN == 0 )) { whiptail --title "Sync failed" --msgbox "Your sync has failed. Please see the Log file for more information:\n\n$LOGFILE" --backtitle $WHIP_BACKTITLE 13 60 } else { whiptail --title "Dry Run Sync failed" --msgbox "Your sync has failed. Please see the Log file for more information:\n\n$LOGFILE" --backtitle $WHIP_BACKTITLE 13 60 } } } #return to main menu setvar TARGETMENUID = '0' } } proc Check_Install_PreReqs { G_AG_CHECK_INSTALL_PREREQ rsync } proc Check_Available_DietPi_Mounts { local temp_file_mounts="/tmp/.dietpi-sync_dietpi_mounts" df -h > "$temp_file_mounts" #Samba Client setvar SAMBA_MOUNT_AVAILABLE = '0' setvar SAMBA_MOUNT_TEXT = ""Not mounted ($FP_SAMBA_MOUNT). Select to setup."" if (( $(cat "$temp_file_mounts" | grep -ci -m1 "/mnt/samba") == 1 )) { setvar SAMBA_MOUNT_AVAILABLE = '1' setvar SAMBA_MOUNT_TEXT = ""Size: $(df -h | grep /mnt/samba | awk '{print $2}')B | Available: $(df -h | grep /mnt/samba | awk '{print $4}')B"" } #FTP Client setvar FTP_MOUNT_AVAILABLE = '0' setvar FTP_MOUNT_TEXT = ""Not mounted ($FP_FTP_MOUNT). Select to setup."" if (( $(cat "$temp_file_mounts" | grep -ci -m1 "/mnt/ftp_client") == 1 )) { setvar FTP_MOUNT_AVAILABLE = '1' setvar FTP_MOUNT_TEXT = ""Mounted and online."" } rm $temp_file_mounts } #///////////////////////////////////////////////////////////////////////////////////// # Settings File #///////////////////////////////////////////////////////////////////////////////////// #Settings File setvar FP_DIETPISYNC_SETTINGS = ""/DietPi/dietpi/.dietpi-sync_settings"" proc Write_Settings_File { rm $FP_DIETPISYNC_SETTINGS &> /dev/null echo -e $FP_SOURCE >> "$FP_DIETPISYNC_SETTINGS" echo -e $FP_TARGET >> "$FP_DIETPISYNC_SETTINGS" echo -e $SYNC_DELETE_MODE >> "$FP_DIETPISYNC_SETTINGS" echo -e $SYNC_COMPRESSION >> "$FP_DIETPISYNC_SETTINGS" echo -e $SYNC_CRONDAILY >> "$FP_DIETPISYNC_SETTINGS" } proc Read_Settings_File { if test -f $FP_DIETPISYNC_SETTINGS { local sed_index=1 setvar FP_SOURCE = $(sed -n "$sed_index"p "$FP_DIETPISYNC_SETTINGS");((sed_index++)) setvar FP_TARGET = $(sed -n "$sed_index"p "$FP_DIETPISYNC_SETTINGS");((sed_index++)) setvar SYNC_DELETE_MODE = $(sed -n "$sed_index"p "$FP_DIETPISYNC_SETTINGS");((sed_index++)) setvar SYNC_COMPRESSION = $(sed -n "$sed_index"p "$FP_DIETPISYNC_SETTINGS");((sed_index++)) setvar SYNC_CRONDAILY = $(sed -n "$sed_index"p "$FP_DIETPISYNC_SETTINGS");((sed_index++)) } } #///////////////////////////////////////////////////////////////////////////////////// # Main Loop #///////////////////////////////////////////////////////////////////////////////////// #pre-reqs, install if required. Check_Install_PreReqs #Read settings file Read_Settings_File #----------------------------------------------------------------------------- #Run Sync if (( $INPUT == 1 )) { Run_Sync #----------------------------------------------------------------------------- #Run menu } elif (( $INPUT == 0 )) { { clear if (( $TARGETMENUID == 0 )) { Menu_Main } elif (( $TARGETMENUID == 1 )) || (( $TARGETMENUID == 2 )) { Menu_Set_Directories } elif (( $TARGETMENUID == 3 )) { Menu_Set_Sync_Delete_Mode } elif (( $TARGETMENUID == 4 )) { Menu_Set_Compression } elif (( $TARGETMENUID == 5 )) { Menu_Set_CronDaily } } #Save settings Write_Settings_File } #----------------------------------------------------------------------------------- #Cleaup left over tmp files rm $FP_INCLUDE_GLOBAL &> /dev/null rm $FP_EXCLUDE_GLOBAL &> /dev/null #----------------------------------------------------------------------------------- exit 0 #----------------------------------------------------------------------------------- }