Bash script to transfer files via SCP
#!/bin/bash
REMOTE_IP="x.x.x.x"
SCP_PASSWORD="mypassword"
expect -c "
set timeout 1
spawn scp -r /Local/SourceFolder uname@$REMOTE_IP:/Remote/DestFolder
expect yes/no { send yes\r ; exp_continue }
expect password: { send $SCP_PASSWORD\r }
expect 100%
sleep 1
exit
"
Save the above script to autoscp.sh and give the execute permission. The SourceFolder is the folder whose contents are sent to DestFolder on the remote host .
$ chmod +x file.sh
$ ./file.sh
Install expect if it's not on our machine, expect is a program that "talks" to other interactive programs according to a script. We use this in this script to provide the password when asked for by the scp command.
sudo apt-get install expect
Bash script to sync local & remote folder via rsync
#!/bin/bash
REMOTE_IP="x.x.x.x"
SCP_PASSWORD="mypassword"
#And now transfer the file over
expect -c "
set timeout 1
spawn rsync -azvv -e ssh /Local/SrcFolder uname@$REMOTE_IP:/Remote/DstFolder
expect yes/no { send yes\r ; exp_continue }
expect password: { send $SCP_PASSWORD\r }
expect 100%
sleep 1
exit
"
-a preserves the date and times, and permissions of the files
-z compresses the data
-vv increases the verbosity of the reporting process
-e specifies remote shell to use
Save the above script to autorsync.sh file and give the execute permission.
Refer this
Ubuntu documentation for more details on rsync. Both the bash scripts mainly automate the rsync and scp transfer, so that password don't need to be supplied.
Scheduling this rsync and scp scripts to run periodically
Use crontab to schedule these scripts to run periodically. To edit crontab use
crontab -e
Add the below lines
# m h dom mon dow command
0 * * * * cd /location/of/script;./autoscp.sh
30 * * * * cd /location/of/script;./autorsync.sh
m - minute
h - hour
dom - day of the month
mon - month
dow - day of the week
0 * * * * will run the script at 0 minutes every hour, every day of all the months.
30 * * * * will run the script at every 30 minutes on every hour, every day of all the months.