Use Winscp to sync files from Windows to Linux#

Recently I upgraded my work laptop to Windows 7. At that time I didn’t want to use the previous sync methods that I have blogged about. I wanted to use something simpler (read easier to install and maintain between different machines). After doing some research I settled on using winscp. Winscp supports folder sync operations through a command line. Winscp takes a simple text file listing the commands that it is to execute. This process can be automated on Windows using batches, one to pull changes and the other to push changes.

Create a text file called ‘pull_changes.txt’ and add the following code:

#Pull changes from the remote folder to the local folder

#http://winscp.net/eng/docs/scriptcommand_synchronize
#open a connection to the server specifying the name of the server
#open scp://server.home.com:3687 -privatekey=C:\location\to\private\key.ppk

#open a connection to the server using a saved winscp session
open troy@server.home.com -privatekey=C:\location\to\private\key.ppk

#local folder: C:\Users\troy.williams\Documents\home sync
#remote folder: /home/troy/home sync

# Synchronize my folders, pulling changes from the remote to the local
synchronize local "C:\Users\troy.williams\Documents\home sync" "/home/troy/home sync"

#close the session
close

#exit the scripting environment
exit

Here is the push script, save the lines to a text file called ‘push_changes.txt’:

#push changes from the local folder to the remote folder

#http://winscp.net/eng/docs/scriptcommand_synchronize

#open a connection to the server specifying the name of the server
#open scp://server.home.com:10000 -privatekey=C:\location\to\private\key.ppk

#open a connection to the server using a saved session
open troy@server.home.com -privatekey=C:\location\to\private\key.ppk

#local folder: C:\Users\troy.williams\Documents\home sync
#remote folder: /home/troy/home sync

# Synchronize my folders, pushing changes from the local to the remote
synchronize remote "C:\Users\troy.williams\Documents\home sync" "/home/troy/home sync"

#close the session
close

#exit the scripting environment
exit

Here is an example of a simple batch file that can be used to execute either of the winscp command files:

@rem --------------------------------
@rem created 2011-08-08 copyright (c) 2011 Troy Williams
@rem This file will pull changes from my server at home

@ECHO OFF

SET WINSCPHOME=C:\Program Files (x86)\WinSCP
SET CWOLDPATH=%PATH%
SET PATH=%WINSCPHOME%;%PATH%

echo Pulling changes from the server

winscp.com /script=pull_changes.txt

pause