下载sftp服务器上的整个目录下的所有文件

最近在学习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()

 

转载于:https://my.oschina.net/OHC1U9jZt/blog/1186393

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值