使用paramiko从远程服务器下载文件和文件夹

下载文件夹
import paramiko
import os
from stat import S_ISDIR as isdir

# 递归上传文件夹,也可以上传文件
def down_from_remote(sftp_obj, remote_dir_name, local_dir_name):
    """远程下载文件"""
    remote_file = sftp_obj.stat(remote_dir_name)
    if isdir(remote_file.st_mode):
        # 文件夹,不能直接下载,需要继续循环
        check_local_dir(local_dir_name)
        print('开始下载文件夹:' + remote_dir_name)
        for remote_file_name in sftp.listdir(remote_dir_name):
            sub_remote = os.path.join(remote_dir_name, remote_file_name)
            sub_remote = sub_remote.replace('\\', '/')
            sub_local = os.path.join(local_dir_name, remote_file_name)
            sub_local = sub_local.replace('\\', '/')
            down_from_remote(sftp_obj, sub_remote, sub_local)
    else:
        # 文件,直接下载
        print('开始下载文件:' + remote_dir_name)
        sftp.get(remote_dir_name, local_dir_name)


def check_local_dir(local_dir_name):
    """本地文件夹是否存在,不存在则创建"""
    if not os.path.exists(local_dir_name):
        os.makedirs(local_dir_name)


if __name__ == "__main__":
    """程序主入口"""
    # 服务器连接信息
    host_name = '192.168.31.11'
    user_name = 'root'
    password = 'cjavapy'
    port = 22
    # 远程文件路径(需要绝对路径)
    remote_dir = '/data/www-data'
    # 本地文件存放路径(绝对路径或者相对路径都可以)
    local_dir = 'file_download/'

    # 连接远程服务器
    t = paramiko.Transport((host_name, port))
    t.connect(username=user_name, password=password)
    sftp = paramiko.SFTPClient.from_transport(t)

    # 远程文件开始下载
    down_from_remote(sftp, remote_dir, local_dir)

    # 关闭连接
    t.close()

参考链接:
https://www.cjavapy.com/article/3168/

最近更新

  1. TCP协议是安全的吗?

    2024-01-08 19:56:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-08 19:56:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-08 19:56:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-08 19:56:03       18 阅读

热门阅读

  1. 赛尔航测管家:航飞数据管理专家

    2024-01-08 19:56:03       35 阅读
  2. 编程语言的走向又将如何呢?

    2024-01-08 19:56:03       34 阅读
  3. 大模型缩放法则

    2024-01-08 19:56:03       37 阅读
  4. 【东华大学oj】28 发工资(面向对象)

    2024-01-08 19:56:03       26 阅读
  5. 内存溢出会导致模块测试正常,植入系统失败

    2024-01-08 19:56:03       37 阅读
  6. 安卓技术栈归纳

    2024-01-08 19:56:03       39 阅读
  7. webman插件创建

    2024-01-08 19:56:03       32 阅读
  8. 智能硬件项目任务书如何编写?

    2024-01-08 19:56:03       38 阅读
  9. @SpringBootApplication 注解(版本2.7.10)

    2024-01-08 19:56:03       36 阅读
  10. 家电玻璃行业分析:全球市场规模不断扩大

    2024-01-08 19:56:03       36 阅读
  11. mysql如何取出json里某一个字段或计算两数

    2024-01-08 19:56:03       36 阅读
  12. 【东华大学oj】20 提醒队列(面向对象)

    2024-01-08 19:56:03       30 阅读