You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Paramiko获取SFTP服务器上最后修改的文件名?

使用Paramiko获取目录中最后修改的文件名

直接上解决方案

如果你要找某个目录下最后修改的文件,可以按下面的步骤来:

  1. 用sftp.listdir_attr()批量获取目录下所有文件的属性(比挨个调用stat()高效)
  2. 筛选出纯文件(排除子目录),按修改时间排序后取第一个

完整代码(结合你的现有连接逻辑)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:20:44