Windows 本地文件上传至远程Linux服务器是经常需要使用的功能, 我使用的 Windows 桌面版工具是 WinSCP,用于本地与云端之间的文件传输。WinSCP 的优点是可视化效果好、稳定, 就像在 windows 电脑上处理本地文件一样,是一款很好用的文件管理软件。
但 WinSCP 的所有操作是手动进行的,不适用于 regular 的重复性操作,如定期将特定文件上传至服务器。而这一点可以用 Python 方便的实现,这里使用的是第三方库paramiko
主要实现的功能是:连接远程服务器–>读取远程及本地文件列表–>文件传输。核心代码如下,直接使用此代码,可实现将本地文件上传至Linux远程服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
def upload_to_linux(local_dir = LOCAL_DIR, remote_dir = REMOTE_DIR): try: t = paramiko.Transport((hostname, port)) t.connect(username=username, password=password) sftp = paramiko.SFTPClient.from_transport(t) print('Upload file start %s ' % datetime.datetime.now()) for root, dirs, files in os.walk(local_dir): for filespath in files: local_file = os.path.join(root, filespath) print('待上传的本地文件:%s' % local_file) a = local_file.replace(local_dir, '').replace('\\', '/').lstrip('/') remote_file = os.path.join(remote_dir, a) print('远程目的地文件:%s' % remote_file) try: sftp.put(local_file, remote_file) except Exception as e: sftp.mkdir(os.path.split(remote_file)[0]) sftp.put(local_file, remote_file) print("Upload %s to remote %s" % (local_file, remote_file)) for name in dirs: local_path = os.path.join(root, name) print(0, local_path, local_dir) a = local_path.replace(local_dir, '').replace('\\', '') print(1, a) print(1, remote_dir) remote_path = os.path.join(remote_dir, a) print(33, remote_path) try: sftp.mkdir(remote_path) print(44, "mkdir path %s" % remote_path) except Exception as e: print(55, e) print('Upload file success %s ' % datetime.datetime.now()) t.close() except Exception as e: print(88, e) |