forked from mdmonk/python_snippets
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ftp_dir_sync.py
65 lines (58 loc) · 1.99 KB
/
ftp_dir_sync.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
def moveFTPFiles(serverName,userName,passWord,remotePath,localPath,deleteRemoteFiles=False,onlyDiff=False):
"""Connect to an FTP server and bring down files to a local directory"""
import os
from sets import Set
from ftplib import FTP
try:
ftp = FTP(serverName)
except:
print "Couldn't find server"
ftp.login(userName,passWord)
ftp.cwd(remotePath)
try:
print "Connecting..."
if onlyDiff:
lFileSet = Set(os.listdir(localPath))
rFileSet = Set(ftp.nlst())
transferList = list(rFileSet - lFileSet)
print "Missing: " + str(len(transferList))
else:
transferList = ftp.nlst()
delMsg = ""
filesMoved = 0
for fl in transferList:
# create a full local filepath
localFile = localPath + fl
grabFile = True
if grabFile:
#open a the local file
fileObj = open(localFile, 'wb')
# Download the file a chunk at a time using RETR
ftp.retrbinary('RETR ' + fl, fileObj.write)
# Close the file
fileObj.close()
filesMoved += 1
# Delete the remote file if requested
if deleteRemoteFiles:
ftp.delete(fl)
delMsg = " and Deleted"
print "Files Moved" + delMsg + ": " + str(filesMoved) + " on " + timeStamp()
except:
print "Connection Error - " + timeStamp()
ftp.close() # Close FTP connection
ftp = None
def timeStamp():
"""returns a formatted current time/date"""
import time
return str(time.strftime("%a %d %b %Y %I:%M:%S %p"))
if __name__ == '__main__':
#--- constant connection values
ftpServerName = "ftpservername.com"
ftpU = "ftpusername"
ftpP = "ftppassword"
remoteDirectoryPath = "remote/ftp/subdirectory"
localDirectoryPath = """local\sub\directory"""
print "\n-- Retreiving Files----\n"
deleteAfterCopy = False #set to true if you want to clean out the remote directory
onlyNewFiles = True #set to true to grab & overwrite all files locally
moveFTPFiles(ftpServerName,ftpU,ftpP,remoteDirectoryPath,localDirectoryPath,deleteAfterCopy,onlyNewFiles)