Search code examples
javasftpdirectory-listingsshj

How to get pre-filtered file list from SFTP server using SSHJ


I am using SSHJ SFTP library to get file list from SFTP-server. The connection to server is very slow and there are tens of thousands of files in directory. Often getting file list will end in various timeout / socket errors.

Is there possibility to tell the client to retrieve file list only from eg. ".zip" files so that it would have positive impact on the performance? Pseudo command: sftpClient.ls("*.zip")

I know there is a method List<RemoteResourceInfo> net.schmizz.sshj.sftp.SFTPClient.ls(String path, RemoteResourceFilter filter) which will filter the list, but from what I understand, the filtering would happen only in client side? ie. the client would still receive whole file list and just after then it would be filtered.

Is there any way to achieve this so that server would only return the names requested? Does the SFTP-protocol even support this?


Solution

  • Indeed, the SFTP protocol does not have a way to provide a list of files matching any criteria. It does not matter, what SFTP library you are using.

    You would have to use another interface/API if you need the filtered list. If you have a shell access, you might use shell command ls *.zip.

    Or build you own (REST?) API.