如何使用 Paramiko 从 SFTP 服务器下载最新文件?
How to download only the latest file from SFTP server with Paramiko?
我想编写连接到我大学 SFTP 服务器并下载最新文件和练习的脚本。到目前为止,我已经对 Paramiko 示例中的代码进行了一些更改,但我不知道如何下载最新文件。
这是我的代码:
import functools
import paramiko
class AllowAnythingPolicy(paramiko.MissingHostKeyPolicy):
def missing_host_key(self, client, hostname, key):
return
adress = 'adress'
username = 'username'
password = 'password'
client = paramiko.SSHClient()
client.set_missing_host_key_policy(AllowAnythingPolicy())
client.connect(adress, username= username, password=password)
def my_callback(filename, bytes_so_far, bytes_total):
print ('Transfer of %r is in progress' % filename)
sftp = client.open_sftp()
sftp.chdir('/directory/to/file')
for filename in sorted(sftp.listdir()):
if filename.startswith('Temat'):
callback_for_filename = functools.partial(my_callback, filename)
sftp.get(filename, filename, callback=callback_for_filename)
client.close()
使用 SFTPClient.listdir_attr
而不是 SFTPClient.listdir
来获取带有属性的列表(包括文件时间戳)。
然后,找到最大.st_mtime
attribute.
的文件条目
代码如下:
latest = 0
latestfile = None
for fileattr in sftp.listdir_attr():
if fileattr.filename.startswith('Temat') and fileattr.st_mtime > latest:
latest = fileattr.st_mtime
latestfile = fileattr.filename
if latestfile is not None:
sftp.get(latestfile, latestfile)
有关更复杂的示例,请参阅
import paramiko
remote_path = '/tmp'
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=<IP>, username=<USER>, password=<PW>,allow_agent=False)
sftp_client = ssh_client.open_sftp()
sftp_client.chdir(remote_path)
for f in sorted(sftp_client.listdir_attr(), key=lambda k: k.st_mtime, reverse=True):
sftp_client.get(f.filename, f.filename)
break
sftp_client.close()
ssh_client.close()
这将以用户 (USER) 身份使用密码 (PW) 连接到远程服务器 (IP),并下载
下可用的最新文件
我想编写连接到我大学 SFTP 服务器并下载最新文件和练习的脚本。到目前为止,我已经对 Paramiko 示例中的代码进行了一些更改,但我不知道如何下载最新文件。
这是我的代码:
import functools
import paramiko
class AllowAnythingPolicy(paramiko.MissingHostKeyPolicy):
def missing_host_key(self, client, hostname, key):
return
adress = 'adress'
username = 'username'
password = 'password'
client = paramiko.SSHClient()
client.set_missing_host_key_policy(AllowAnythingPolicy())
client.connect(adress, username= username, password=password)
def my_callback(filename, bytes_so_far, bytes_total):
print ('Transfer of %r is in progress' % filename)
sftp = client.open_sftp()
sftp.chdir('/directory/to/file')
for filename in sorted(sftp.listdir()):
if filename.startswith('Temat'):
callback_for_filename = functools.partial(my_callback, filename)
sftp.get(filename, filename, callback=callback_for_filename)
client.close()
使用 SFTPClient.listdir_attr
而不是 SFTPClient.listdir
来获取带有属性的列表(包括文件时间戳)。
然后,找到最大.st_mtime
attribute.
代码如下:
latest = 0
latestfile = None
for fileattr in sftp.listdir_attr():
if fileattr.filename.startswith('Temat') and fileattr.st_mtime > latest:
latest = fileattr.st_mtime
latestfile = fileattr.filename
if latestfile is not None:
sftp.get(latestfile, latestfile)
有关更复杂的示例,请参阅
import paramiko
remote_path = '/tmp'
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=<IP>, username=<USER>, password=<PW>,allow_agent=False)
sftp_client = ssh_client.open_sftp()
sftp_client.chdir(remote_path)
for f in sorted(sftp_client.listdir_attr(), key=lambda k: k.st_mtime, reverse=True):
sftp_client.get(f.filename, f.filename)
break
sftp_client.close()
ssh_client.close()
这将以用户 (USER) 身份使用密码 (PW) 连接到远程服务器 (IP),并下载