当前位置: 首页 > 知识库问答 >
问题:

从Sftp筛选并获取远程文件名列表

班高明
2023-03-14

不知道nlst命令是否支持筛选

下面是代码示例:

筛选器实例:

private FileListFilter lastModifiedFilter(){
    LastModifiedFileListFilter fileListFilter = new LastModifiedFileListFilter();
    fileListFilter.setAge(120, TimeUnit.SECONDS);
    return fileListFilter;
}
  @Bean
public IntegrationFlow deleteFiles(){
    return IntegrationFlows.from("integration.channel.bulk-delete")
            .handle(Sftp.outboundGateway(sftpSessionFactory(),
            AbstractRemoteFileOutboundGateway.Command.NLST,"headers[path]")
                    .filter(lastModifiedFilter()))
            .get();
 @Bean
public IntegrationFlow deleteFiles(){
    return IntegrationFlows.from("integration.channel.bulk-delete")
            .handle(Sftp.outboundGateway(sftpSessionFactory(),
            AbstractRemoteFileOutboundGateway.Command.NLST,"headers[path]")
                    .filterFunction(file->{
                        Instant decidedTime = Instant.now().minus(120, ChronoUnit.SECONDS);
                       return Instant.ofEpochSecond(file.getAttrs().getMTime()).isBefore(decidedTime);
                    }))
            .log()
            .get();

更新

下一个handle方法中的RM命令不会删除,我还在dorm()方法中放置了一个断点,尽管我的for循环中有文件,但它不会停止

@Bean
public IntegrationFlow deleteFiles(){
    return IntegrationFlows.from("integration.channel.bulk-delete")
            .handle(Sftp.outboundGateway(sftpSessionFactory(),
            AbstractRemoteFileOutboundGateway.Command.LS,"headers[path]")
                    .options(AbstractRemoteFileOutboundGateway.Option.NAME_ONLY)
                    .filterFunction(file->{
                        Instant decidedTime = Instant.now().minus(120, ChronoUnit.SECONDS);
                        return Instant.ofEpochSecond(file.getAttrs().getMTime()).isBefore(decidedTime);
                    }))
            .log()
            .handle(fileList->{
                List<String> files = (List<String>) fileList.getPayload();
                for (String remoteFile: files) {
                    Sftp.outboundGateway(sftpSessionFactory(),
                            AbstractRemoteFileOutboundGateway.Command.RM,
                            "headers[file_remoteDirectory]+"+remoteFile);
                }
            })
            .get();

共有1个答案

邵宏达
2023-03-14

NLST只获取文件名,因此没有时间戳可用于筛选。

NLST当前根本不应用任何筛选器。

使用LS(可能与递归-r选项一起使用)。

 类似资料:
  • 我想把文件从远程服务器拉到我的本地服务器。我正在使用Spring Integration SFTP来拉文件。我有以下配置: 我不想在成功拉取后从remotedir中删除文件。这里发生的事情是每30秒,从remotedir的文件就会被拉到我的本地文件。我希望spring batch程序在第一次之后停止,不要再次拉出相同的文件。我怎样才能做到这一点?

  • 问题内容: 有没有一种方法可以用Java从远程git存储库中以编程方式下载单个文件? 我更喜欢使用尽可能少的带宽的解决方案,最好只下载单个文件。我不需要浏览存储库,我已经有了文件的路径。 我更喜欢不依赖于其他应用程序的解决方案(例如,在计算机上安装另一个git客户端)。一个包含git客户端实现本身的Java库是最佳的。 我可以使用SVNKit与Subversion进行类似的操作,并且我已经看到有g

  • 问题内容: 有没有办法从或从中获取文件名? 问题答案: 看起来答案是否定的: http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileOutputStream.html http://docs.oracle.com/javase/7/docs/api/index.html?java/io/FileOutputStream.html

  • 我试图通过sftp协议使用JSch库读取文件: 问题是我在代码的最后一行遇到以下异常: 我在谷歌上搜索了一下,发现这个错误可能来自sftp服务器,通常发生在上传过程中(空间不足等)。因此,我在sftp服务器上设置了日志记录(调试级别),只看到以下内容: 没有别的了。我不知道我还能调查什么,因为我从双方都获得了所有相关日志:(远程机器是一台带有OpenSSH的Debian。

  • 本文向大家介绍php获取远程文件大小,包括了php获取远程文件大小的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php获取远程文件大小的方法,分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的php程序设计有所帮助,大家能够喜欢小便的文章,大家共同进步。

  • 问题内容: 如果我有文件指针,是否可以获取文件名? 可以使用吗? 问题答案: 您可以通过获得路径。例: 如果 只 需要文件名,则可能需要: 文件对象文档(适用于Python 2)在此处。