上传指定目录中的文件至远程SFTP服务器

将本地指定目录中的文件上传至远程SFTP服务器中,首先列出本地目录中待上传的文件列表,然后通过paramiko插件实现远程创建目录和上传文件。

# 将本地指定目录中的文件上传至远程SFTP服务器中,首先列出本地目录中待上传的文件列表,然后通过paramiko插件实现远程创建目录和上传文件。

from multiprocessing.connection import address_type
from sys import excepthook
import os
import paramiko

sftp_addr = '10.10.100.102'
sftp_port = 22
sftp_user = 'my_username'
sftp_pswd = 'my_password'
sftp_fold = '/home/my_username/sftp/path/to/files/'
file_path = os.getcwd()

def list_local_files(directory):
    try:
        files = os.listdir(directory)
        files_list = [f for f in files if os.path.isfile(os.path.join(directory, f))]
        return files_list
    except Exception as e:
        print(f"Error: {e}")
        return []

def sftp_make_directory(host_addr, host_port, host_user, host_pswd, file_path):
    try:
        transport = paramiko.Transport((host_addr, host_port))
        transport.connect(username=sftp_user, password=sftp_pswd)
        sftp = paramiko.SFTPClient.from_transport(transport)
        dir_list = file_path.split('/')
        #相对路径
        #dir_list = file_path.strip('/').split('/')
        current_path = dir_list[0]
        for dir_name in dir_list[1:]:
            current_path = f"{current_path}/{dir_name}"
            try:
                sftp.stat(current_path)
            except FileNotFoundError:
                sftp.mkdir(current_path)
        sftp.close()
        transport.close()
    except Exception as e:
        print(f"Error: {e}")

def sftp_upload_files():
    sftp_make_directory(sftp_addr, sftp_port, sftp_user, sftp_pswd, sftp_fold)
    file_list = list_local_files(file_path)
    try:
        transport = paramiko.Transport(sftp_addr, sftp_port)
        transport.connect(username=sftp_user, password=sftp_pswd)
        sftp = paramiko.SFTPClient.from_transport(transport)
        for file in file_list:
            sftp.put(file, sftp_fold + '/' + file)
            print(f"文件'{file}'成功上传至'{sftp_fold}'")
        sftp.close()
        transport.close()
    except Exception as e:
        print(f"Error: {e}")

if __name__ == '__main__':
    sftp_upload_files()

原创文章禁止转载:技术学堂 » 上传指定目录中的文件至远程SFTP服务器

精彩评论

8+5=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏