从 Linux 服务器上递归下载文件夹下所有文件

开发 系统
本文我们将介绍如何使用 Python 从 Linux 服务器上递归下载文件夹下的所有文件。

本文将介绍如何使用Python从Linux服务器上递归下载文件夹下的所有文件。我们将使用paramiko库来实现SSH连接,以及os和shutil库来处理文件和目录。如果你还没有安装paramiko库,请先使用以下命令安装:

pip install paramiko

1. 创建SSH连接

首先创建一个SSH连接到Linux服务器:

import paramiko

def create_ssh_client(hostname, port, username, password):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(hostname, port, username, password)
    return client

2. 递归下载文件夹下的所有文件

编写一个函数来递归下载文件夹下的所有文件。这个函数将接收一个SSH客户端对象、一个远程文件夹路径和一个本地保存路径作为参数。

import os
import shutil

def download_folder(ssh_client, remote_folder, local_folder):
    # 在远程服务器上创建本地文件夹(如果不存在)
    sftp = ssh_client.open_sftp()
    sftp.mkdir(local_folder) if not os.path.exists(local_folder) else None
    sftp.close()

    # 在远程服务器上获取文件夹列表
    stdout, _ = ssh_client.exec_command(f"ls -lR {remote_folder}")
    folder_list = [line.split()[-1] for line in stdout.readlines()]

    # 遍历文件夹列表并递归下载每个文件
    for file in folder_list:
        remote_file = f"{remote_folder}/{file}"
        local_file = f"{local_folder}/{file}"
        sftp.get(remote_file, local_file) if os.path.isfile(remote_file) else None
        download_folder(ssh_client, remote_file, local_file) if os.path.isdir(remote_file) else None

3. 使用示例

整体调用这些函数来从Linux服务器上递归下载文件夹下的所有文件。假设我们的服务器地址为example.com,端口为22,用户名为user,密码为password,我们想要下载的远程文件夹为/remote/folder,并将其保存到本地的/local/folder中。

if __name__ == "__main__":
    hostname = "example.com"
    port = 22
    username = "user"
    password = "password"
    remote_folder = "/remote/folder"
    local_folder = "/local/folder"

    ssh_client = create_ssh_client(hostname, port, username, password)
    download_folder(ssh_client, remote_folder, local_folder)

运行上述代码后,在本地的/local/folder中可以看到远程服务器上的/remote/folder文件夹及其内容。

责任编辑:赵宁宁 来源: Python技术
相关推荐

2024-06-20 12:55:23

2015-08-07 10:02:34

Java线程池递归

2020-10-25 16:53:56

Linux 开源操作系统

2017-03-09 14:42:21

LinuxsFTP上传下载

2018-08-07 11:05:10

Windows 10Windows下载文件夹

2016-11-18 15:08:54

linux服务器策略

2022-11-10 15:17:43

Windows文件Linux

2020-12-02 11:48:05

TFTP

2013-02-19 11:12:53

IE10

2015-10-10 16:46:14

HTTP网络协议文件传输

2015-10-09 09:41:24

HTTP网络协议文件传输

2015-09-28 13:39:13

Http网络协议HTTP

2015-09-29 09:25:20

HTTP网络协议

2015-10-08 09:38:24

HTTP网络协议文件传输

2019-02-25 15:36:52

Linux复制文件远程系统

2018-12-28 10:05:11

Linux服务器后门

2009-09-25 10:13:15

2016-12-07 09:30:00

Power QueryExcel文件

2011-01-13 10:01:27

2021-11-17 09:01:23

Python批量合并Python基础
点赞
收藏

51CTO技术栈公众号