Last active
August 29, 2015 14:05
-
-
Save leafsummer/f3615aa720df16fc1f38 to your computer and use it in GitHub Desktop.
简单的ftp文件上传和下载
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# -*- coding:utf-8 -*- | |
#this script is used to do some operations more convenient via ftp | |
#1.[p]upload many files in the same time,show md5s | |
#2.[g]download many files in the same time,show md5s | |
#3.[l]list all the files on ftp site | |
#4.[f]search a file on ftp site,return True or Flase | |
#5.[h]show help info | |
#add upload and download operations 20111210 version0.1 | |
#add md5sum after ops 20120308 version0.2 | |
import sys,os,ftplib,socket | |
CONST_HOST = "ip" | |
CONST_USERNAME = "username" | |
CONST_PWD = "pwd" | |
CONST_BUFFER_SIZE = 8192 | |
COLOR_NONE = "\033[m" | |
COLOR_GREEN = "\033[01;32m" | |
COLOR_RED = "\033[01;31m" | |
COLOR_YELLOW = "\033[01;33m" | |
def connect(): | |
try: | |
ftp = ftplib.FTP(CONST_HOST) | |
ftp.login(CONST_USERNAME,CONST_PWD) | |
return ftp | |
except socket.error,socket.gaierror: | |
print("FTP is unavailable,please check the host,username and password!") | |
sys.exit(0) | |
def disconnect(ftp): | |
ftp.quit() | |
def upload(ftp, filepath): | |
f = open(filepath, "rb") | |
file_name = os.path.split(filepath)[-1] | |
try: | |
ftp.storbinary('STOR %s'%file_name, f, CONST_BUFFER_SIZE) | |
except ftplib.error_perm: | |
return False | |
return True | |
def download(ftp, filename): | |
f = open(filename,"wb").write | |
try: | |
ftp.retrbinary("RETR %s"%filename, f, CONST_BUFFER_SIZE) | |
except ftplib.error_perm: | |
return False | |
return True | |
def list(ftp): | |
ftp.dir() | |
def find(ftp,filename): | |
ftp_f_list = ftp.nlst() | |
if filename in ftp_f_list: | |
return True | |
else: | |
return False | |
def help(): | |
print("help info:") | |
print("[./ftp.py l]\t show the file list of the ftp site ") | |
print("[./ftp.py f filenamA filenameB]\t check if the file is in the ftp site") | |
print("[./ftp.py p filenameA filenameB]\t upload file into ftp site") | |
print("[./ftp.py g filenameA filenameB]\t get file from ftp site") | |
print("[./ftp.py h]\t show help info") | |
print("other params are invalid") | |
def main(): | |
args = sys.argv[1:] | |
if len(args) == 0: | |
print("Params needed!") | |
sys.exit(0) | |
ftp = connect() | |
success_list = [] | |
failed_list = [] | |
if args[0] == "p": | |
f_list = args[1:] | |
for up_file in f_list: | |
if not os.path.exists(up_file): | |
print(("UPLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+" :file not exist")%up_file) | |
continue | |
elif not os.path.isfile(up_file): | |
print(("UPLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+" :%s is not a file")%(up_file,up_file)) | |
continue | |
if upload(ftp, up_file): | |
success_list.append(up_file) | |
else: | |
failed_list.append(up_file) | |
if len(success_list) > 0 : | |
print((COLOR_GREEN + "UPLOAD SUCCESS: %s" + COLOR_NONE)%(" ".join(success_list))) | |
print("md5sum:") | |
for f in success_list: | |
print( os.popen("md5sum " + f).read()[:-1]) | |
if len(failed_list) > 0: | |
print((COLOR_RED + "UPLOAD FAILED: %s" + COLOR_NONE)%(" ".join(failed_list))) | |
elif args[0] == "g": | |
f_list = args[1:] | |
for down_file in f_list: | |
if not find(ftp,down_file): | |
print(("DOWNLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+" :%s is not in the ftp site")%(down_file,down_file)) | |
continue | |
if download(ftp, down_file): | |
success_list.append(down_file) | |
else: | |
failed_list.append(down_file) | |
if len(success_list) > 0 : | |
print((COLOR_GREEN + "DOWNLOAD SUCCESS: %s" + COLOR_NONE)%(" ".join(success_list))) | |
print("md5sum:") | |
for f in success_list: | |
print( os.popen("md5sum " + f).read()[:-1]) | |
if len(failed_list) > 0: | |
print((COLOR_RED + "DOWNLOAD FAILED: %s" + COLOR_NONE)%(" ".join(failed_list))) | |
elif args[0] == "l": | |
list(ftp) | |
elif args[0] == "f": | |
f_list = args[1:] | |
for f_file in f_list: | |
if find(ftp,f_file): | |
print(("SEARCH: %s "+COLOR_GREEN+"EXIST"+COLOR_NONE)%f_file) | |
else: | |
print(("SEARCH: %s "+COLOR_RED+"NOT EXIST"+COLOR_NONE)%f_file) | |
if len(f_file) > 3: | |
print("Similar File List:") | |
s = ftp.nlst() | |
print ", ".join([k for k in s if f_file in k]) | |
elif args[0] == "h": | |
help() | |
else: | |
print("args are invalid!") | |
help() | |
disconnect(ftp) | |
if __name__ == "__main__": | |
main() |
Author
leafsummer
commented
Aug 21, 2014
- login(user='',passwd='', acct='') 登录到FTP 服务器,所有的参数都是可选的
- pwd() 当前工作目录
- cwd(path) 把当前工作目录设置为path
- dir([path[,...[,cb]]) 显示path 目录里的内容,可选的参数cb 是一个回调函数,会被传给retrlines()方法
- nlst([path[,...]) 与dir()类似,但返回一个文件名的列表,而不是显示这些文件名
- retrlines(cmd [, cb]) 给定FTP 命令(如“RETR filename”),用于下载文本文件。可选的回调函数cb 用于处理文件的每一行
- retrbinary(cmd, cb[,bs=8192[, ra]]) 与retrlines()类似,只是这个指令处理二进制文件。回调函数cb 用于处理每一块(块大小默认为8K)下载的数据。
- storlines(cmd, f) 给定FTP 命令(如“STOR filename”),以上传文本文件。要给定一个文件对象f
- storbinary(cmd, f[,bs=8192]) 与storlines()类似,只是这个指令处理二进制文件。要给定一个文件对象f,上传块大小bs 默认为8Kbs=8192])
- rename(old, new) 把远程文件old 改名为new
- delete(path) 删除位于path 的远程文件
- mkd(directory) 创建远程目录
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment