通过SSH从服务器传输大文件的一部分

时间:2014-12-01 22:41:17

标签: java unix ssh file-transfer

对于我们的应用程序,我们根据环境登录到多个不同远程服务器上的文件。虽然翻转是每天,但对于某些环境,日志可能会变得非常大(典型的高流量环境有一些日志每天达到10 GB)。

基本上我想要实现的功能类似于Unix less命令,我可以跳转到文件的最后一行并只读取最新的部分。

我开始使用Java中的JSch,它适用于小文件,因为我可以跳到最后减去一定数量的字节,并从日志的最后部分创建一个新文件。代码看起来像这样:

Session session = createJSchSession(user, pass, host, port);
ChannelSftp sftpChannel = createSftpChannel(session);
long filesize = getFileSize(sftpChannel, path);

InputStream in = sftpChannel.get("/path/to/file/hello.log");

in.skip(filesize - bytesToRead);

但是对于较大的文件,执行时间并不比我刚刚传输整个文件好。计时后,我确定skip方法是罪魁祸首,因为它似乎只是调用in.read() n 次。

问题是,如何从远程服务器传输一小块文本文件?我甚至没有使用Java,任何类型的脚本都可以工作。

0 个答案:

没有答案