最近在学习python,同时在做一个项目需要访问sftp,下载所有文件以及上传本地文件到ftp服务器上。借此机会写了一点儿python脚本。
在本例中试用了paramiko模块,本地环境安装请自行参照pip安装即可。以下是代码:
#!/usr/bin/python
#-*-coding:utf-8-*-
import paramiko
import os
import stat
def getAllFilePath(sftp, remote):
"""
获取指定sftp目录下的所有文件路径
:param sftp: 建立链接的sftp
:param remote: 指定访问的目录
:return:
"""
try:
for attr in sftp.listdir_attr(remote):
# 判断是否为目录
if stat.S_ISDIR(attr.st_mode):
# 计算子目录在ftp服务器上的路径
sub_remote = remote + os.sep + attr.filename
# 生成器
yield from getAllFilePath(sftp, sub_remote)
else:
# 生成器
yield remote + os.sep + attr.filename
except Exception as e:
print('getAllFilePath exception:', e)
if __name__ == '__main__':
# sftp主机
host='192.168.1.230'
# sftp端口号
port=22
# sftp登录用户名
username='mysftp'
# sftp登录密码
password='mysftp~1'
# 下载文件至本地目录
local='/Users/xwszt/Downloads/aaa/'
# sftp指定目录
remote='/download'
# 建立sftp链接
sf = paramiko.Transport((host, port))
sf.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(sf)
# 获取sftp指定目录下的所有文件路径
filenames = getAllFilePath(sftp, remote)
# 下载所有文件
for fn in filenames:
filename = os.path.split(fn)[-1]
sftp.get(fn, local + os.sep + filename)
#关闭sftp
sf.close()