ftp 基础命令
cd:切换目标路径
lcd:查看当前路径或切换当前路径
prompt:关闭交互,例如mget下载多个文件,没下载一个都要选择y/n,prompt模式默认为y,无需交互
binary:设定传输方式为二进制
put/send:上传
get:下载单个文件,文件名不支持通配符
mget:下载多个,支持通配符
ftp> ascii # 设定以ASCII方式传送文件(缺省值)
ftp> bell # 每完成一次文件传送,报警提示.
ftp> binary # 设定以二进制方式传送文件.
ftp> bye # 终止主机FTP进程,并退出FTP管理方式.
ftp> case # 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母.
ftp> cd # 同UNIX的CD命令.
ftp> cdup # 返回上一级目录.
ftp> chmod # 改变远端主机的文件权限.
ftp> close # 终止远端的FTP进程,返回到FTP命令状态, 所有的宏定义都被删除.
ftp> delete # 删除远端主机中的文件.
ftp> dir [remote-directory] [local-file] # 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件.
ftp> get [remote-file] [local-file] # 从远端主机中传送至本地主机中.
ftp> help [command] # 输出命令的解释.
ftp> lcd # 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录.
ftp> ls [remote-directory] [local-file] # 同DIR.
ftp> macdef # 定义宏命令.
ftp> mdelete [remote-files] # 删除一批文件.
ftp> mget [remote-files] # 从远端主机接收一批文件至本地主机.
ftp> mkdir directory-name # 在远端主机中建立目录.
ftp> mput local-files # 将本地主机中一批文件传送至远端主机.
ftp> open host [port] # 重新建立一个新的连接.
ftp> prompt # 交互提示模式.
ftp> put local-file [remote-file] # 将本地一个文件传送至远端主机中.
ftp> pwd # 列出当前远端主机目录.
ftp> quit # 同BYE.
ftp> recv remote-file [local-file] # 同GET.
ftp> rename [from] [to] # 改变远端主机中的文件名.
ftp> rmdir directory-name # 删除远端主机中的目录.
ftp> send local-file [remote-file] # 同PUT.
ftp> status # 显示当前FTP的状态.
ftp> system # 显示远端主机系统类型.
ftp> user user-name [password] [account] # 重新以别的用户名登录远端主机.
ftp> ? [command] # 同HELP. [command]指定需要帮助的命令名称。如果没有指定 command,ftp 将显示全部命令的列表。
ftp> ! # 从 ftp 子系统退出到外壳。
ftplib python命令
ftp登陆连接
from ftplib import FTP #加载ftp模块
ftp=FTP() #设置变量
ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
ftp.connect("IP","port") #连接的ftp sever和端口
ftp.login("user","password") #连接的用户名,密码
print ftp.getwelcome() #打印出欢迎信息
ftp.cmd("xxx/xxx") #进入远程目录
bufsize=1024 #设置的缓冲区大小
filename="filename.txt" #需要下载的文件
file_handle=open(filename,"wb").write #以写模式在本地打开文件
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收服务器上文件并写入本地文件
ftp.set_debuglevel(0) #关闭调试模式
ftp.quit() #退出ftp
ftp相关命令操作
ftp.cwd(pathname) #设置FTP当前操作的路径
ftp.dir() #显示目录下所有目录信息
ftp.nlst() #获取目录下的文件
ftp.mkd(pathname) #新建远程目录
ftp.pwd() #返回当前所在位置
ftp.rmd(dirname) #删除远程目录
ftp.delete(filename) #删除远程文件
ftp.rename(fromname, toname)#将fromname修改名称为toname。
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上传目标文件
ftp.retrbinary("RETR filename.txt",file_handel,bufsize) #下载FTP文件
函数式上传、下载
#coding: utf-8
from ftplib import FTP
import time
import tarfile
#!/usr/bin/python
#-*- coding: utf-8 -*-
from ftplib import FTP
def ftpconnect(host, username, password, port):
ftp = FTP()
#ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
ftp.connect(host, port) #连接
ftp.login(username, password) #登录,如果匿名登录则用空串代替即可
return ftp
def downloadfile(ftp, remotepathfile, localpathfile):
bufsize = 1024 #设置缓冲块大小
fp = open(localpathfile,'wb') #以写模式在本地打开文件
ftp.retrbinary('RETR ' + remotepathfile, fp.write, bufsize) #接收服务器上文件并写入本地文件
ftp.set_debuglevel(0) #关闭调试 ; ftp.set_debuglevel(2) : 打开调试级别2,显示详细信息
fp.close() #关闭文件
def uploadfile(ftp, remotepathfile, localpathfile):
bufsize = 1024
fp = open(localpathfile, 'rb')
ftp.storbinary('STOR '+ remotepathfile , fp, bufsize) #上传文件
ftp.set_debuglevel(0) #关闭调试 ; ftp.set_debuglevel(2) : 打开调试级别2,显示详细信息
fp.close() #关闭文件
if __name__ == "__main__":
ftp = ftpconnect("******", "***", "***",21)
downloadfile(ftp, "***", "***")
uploadfile(ftp, "***", "***")
ftp.quit()
类封装,上传下载目录树
#coding:utf-8
from ctypes import *
import os
import sys
import ftplib
class myFtp:
ftp = ftplib.FTP()
bIsDir = False
path = ""
def __init__(self, host, port='21'):
#self.ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
#self.ftp.set_pasv(0) #0主动模式 1 #被动模式
self.ftp.connect( host, port )
def Login(self, user, passwd):
self.ftp.login( user, passwd )
print self.ftp.welcome
def DownLoadFile(self, LocalFile, RemoteFile):
file_handler = open( LocalFile, 'wb' )
self.ftp.retrbinary( "RETR %s" %( RemoteFile ), file_handler.write )
file_handler.close()
return True
def UpLoadFile(self, LocalFile, RemoteFile):
if os.path.isfile( LocalFile ) == False:
return False
file_handler = open(LocalFile, "rb")
self.ftp.storbinary('STOR %s'%RemoteFile, file_handler, 4096)
file_handler.close()
return True
def UpLoadFileTree(self, LocalDir, RemoteDir):
if os.path.isdir(LocalDir) == False:
return False
print "LocalDir:", LocalDir
LocalNames = os.listdir(LocalDir)
print "list:", LocalNames
print RemoteDir
self.ftp.cwd( RemoteDir )
for Local in LocalNames:
src = os.path.join( LocalDir, Local)
if os.path.isdir( src ): self.UpLoadFileTree( src, Local )
else:
self.UpLoadFile( src, Local )
self.ftp.cwd( ".." )
return
def DownLoadFileTree(self, LocalDir, RemoteDir):
print "remoteDir:", RemoteDir
if os.path.isdir( LocalDir ) == False:
os.makedirs( LocalDir )
self.ftp.cwd( RemoteDir )
RemoteNames = self.ftp.nlst()
print "RemoteNames", RemoteNames
print self.ftp.nlst("/del1")
for file in RemoteNames:
Local = os.path.join( LocalDir, file )
if self.isDir( file ):
self.DownLoadFileTree( Local, file )
else:
self.DownLoadFile( Local, file )
self.ftp.cwd( ".." )
return
def show(self, list):
result = list.lower().split( " " )
if self.path in result and "<dir>" in result:
self.bIsDir = True
def isDir(self, path):
self.bIsDir = False
self.path = path
#this ues callback function ,that will change bIsDir value
self.ftp.retrlines( 'LIST', self.show )
return self.bIsDir
def close(self):
self.ftp.quit()
if __name__ == "__main__":
ftp = myFtp('*****')
ftp.Login('***','***')
ftp.DownLoadFileTree('del', '/del1')#ok
ftp.UpLoadFileTree('del', "/del1" )
ftp.close()
print "ok!"