我能够使用 @Martin Prikryl 给出的以下语法成功地将文件从 S3 上传到 SFTP 位置使用 Boto 3 将文件从 AWS S3 传输到 SFTP。
with sftp.open('/sftp/path/filename', 'wb') as f:
s3.download_fileobj('mybucket', 'mykey', f)
我需要将当前日期的文件从 S3 上传到 SFTP 之前,将先前的文件从当前文件夹存档到 archive
文件夹中我试图使用通配符来实现,因为有时,在星期一运行时,您将无法找到星期日的文件,而您拥有上一个文件,即星期五的文件。所以我想实现之前的任何文件,无论日期如何。
示例
我有如下文件夹,需要将
filename_20200623.csv
移动到
ARCHIVE
文件夹,然后将上传新文件
filename_20200625.csv
。
MKT
ABC
ARCHIVE
filename_20200623.csv
预计
MKT
ABC
ARCHIVE
filename_20200623.csv
filename_20200625.csv
Connection.rename
将它们一一移动:
remote_path = "/remote/path"
archive_path = "/archive/path"
for f in sftp.listdir_attr(remote_path):
if (not stat.S_ISDIR(f.st_mode)) and f.filename.startswith('prefix'):
remote_file_path = remote_path + "/" + f.filename
archive_file_path = archive_path + "/" + f.filename
print("Archiving %s to %s" % (remote_file_path, archive_file_path))
sftp.rename(remote_file_path, archive_file_path)
sftp
将引用Paramiko
SFTPClient
类,而不是 pysftp
Connection
类。由于 Paramiko
SFTPClient.listdir_attr
和 SFTPClient.rename
方法的行为与 pysftp 的行为相同。