如何使用Paramiko获取SFTP服务器上最后修改的文件名?
使用Paramiko获取目录中最后修改的文件名
直接上解决方案
如果你要找某个目录下最后修改的文件,可以按下面的步骤来:
- 用
sftp.listdir_attr()批量获取目录下所有文件的属性(比挨个调用stat()高效) - 筛选出纯文件(排除子目录),按修改时间排序后取第一个
完整代码(结合你的现有连接逻辑)
from datetime import datetime import paramiko # 保留你原来的连接代码 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=server["host"], username=server["user"], pkey=pkey, allow_agent=False, look_for_keys=False) sftp = client.open_sftp() print("Connected!") # 替换成你要查询的目标目录路径 target_dir = "/your/target/directory" # 获取目录下所有文件/目录的属性列表 file_attr_list = sftp.listdir_attr(target_dir) # 过滤出纯文件(排除子目录) # 0o40000是Unix系统中目录的权限位标识 files = [attr for attr in file_attr_list if not (attr.st_mode & 0o40000)] if files: # 按修改时间倒序排序,第一个就是最新修改的文件 files.sort(key=lambda f: f.st_mtime, reverse=True) latest_file = files[0] print(f"最后修改的文件: {latest_file.filename}") print(f"修改时间: {datetime.fromtimestamp(latest_file.st_mtime)}") else: print("目标目录里没有文件") # 别忘了关闭连接 sftp.close() client.close()
补充说明
listdir_attr()一次请求就能拿到所有文件的元数据,比先listdir()再逐个stat()减少了SFTP交互次数,性能更好。- 如果需要递归查找所有子目录里的文件,自己写个递归函数即可:遍历每个目录,重复上面的筛选逻辑,把所有文件收集起来再排序。
如果你只是查单个文件的修改时间
那你之前的代码没问题,只要把路径换成具体文件路径就行:
file_path = "/path/to/specific/file" stat_result = sftp.stat(file_path) last_modified = datetime.fromtimestamp(stat_result.st_mtime) print(f"文件 {file_path} 的最后修改时间: {last_modified}")
内容的提问来源于stack exchange,提问作者Gabriel Vieira Lima
相关产品推荐
相关产品推荐

