有一个我可以使用 ssh 访问的远程文件系统。
我需要:
- 扫描此文件系统以查找比给定日期时间更新的所有文件。
- 检索这些文件的名称、大小和修改时间戳的列表
一些限制:
- 我无法将脚本上传到此远程服务器。我只能通过 ssh 运行命令
- 远程服务器中可能有超过 100k 的文件,并且此过程应该至少每分钟发生一次,因此 ssh 调用的次数应该最少,最好等于 1
我已经成功地使用这个得到了(1):
`touch -am -t {timestamp} /tmp/some_filename; find {path} -newer /tmp/some_filename; rm /tmp/some_filename')`
我以为我可以将结果通过管道传输到“xargs ls -l”中,然后解析结果以从那里提取大小和时间戳,但后来我发现 this article ...
另外,我正在使用 python 运行命令(即它不仅仅是命令行),因此可以对来自 ssh 命令的结果进行一些后处理
最佳答案
我建议在服务器端编写或修改 python 脚本,如下所示:
- 如果一段时间内没有获取数据,请使用您提供的 touch/find 脚本获取初始数据,并调用找到的文件以获取所需的属性
- 然后,在服务器上的 python 脚本中,订阅 inotify() 数据以获取更新。
- 当远程连接并需要所有这些数据时,请提供结合 1+2 的最新更新
inotify 是 Linux 支持的系统调用,允许您实时监视目录上的文件系统事件。
参见:
关于python - ssh - 获取许多远程文件的元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17453600/