通过FTP尾文件


11

我试图从Windows桌面访问远程服务器上的大型日志文件。我只有 FTP访问此远程计算机,而没有SSH访问。

目前,我正在使用WinSCP通过FTP下拉整个文件。这意味着我每次都必须传输完整文件。但是,鉴于它是一个日志文件,我可能只需要最后几行。

由于我的带宽受到严格限制,这尤其令人沮丧,因此传输整个文件需要几分钟。

如果我有shell访问权限,则可以通过使用类似tail -100获得最后100行代码的方式轻松实现。

我想找到一种通过FTP执行此操作的解决方案。请注意,它不必是连续的尾巴,只需一个即可。

Answers:


8

您想做的事,绝对可以通过FTP完成。从技术上讲,恢复中断的文件下载时,任何FTP客户端都会执行相同的操作。

尽管从用户角度来看,我不知道是否有任何FTP客户端支持仅给定数量的尾随字节的显式下载。

但是某些FTP客户端肯定会允许您下载以前下载的文件的新尾随内容。

特别是对于WinSCP,只需启动日志文件下载即可。然后,在“ 覆盖确认”提示上,选择“ 继续”(位于“ 否”按钮的下拉菜单中)。请注意,仅当源文件大于目标文件时,该选项显然可用。

如果您确实只想下载日志的最后几行,则可以在启动下载之前通过创建一个虚拟的本地文件来欺骗WinSCP,方法是创建一个虚拟的本地文件,其大小比日志文件小一些。

您还可以轻松实现上述技巧的自动化:

fsutil file createnew mylog.log 100000000
winscp.com /command "open mysession" "get -resume /path_to_log/mylog.log" "exit"

有关的替代方法fsutil,请参见在Windows系统上快速创建大文件?

您可以花费更多的精力来修改脚本,以首先检查日志文件的大小,然后自动计算比日志大小小几千字节的虚拟文件大小。


0

我不知道如何使用WinSCP来执行此操作,并且确实不可能,但是总的来说,您应该能够使用REST命令。参见RFC 3659。不过,我不清楚您是否可以从文件的后期开始下载,或者是否已经收到标记。RFC 3659指出,至少在STREAM模式下,这是可行的,但是:

即使除了数据本身之外,也没有传输任何重新启动标记,使用FILE STRUcture的STREAM模式传输可能会重新启动。这可以通过使用SIZE命令(如果需要),结合RESTART(REST)命令和一种标准文件传输命令来完成。


0

我没有听说有任何软件可以满足您的需求。但是,如果您是程序员,那么寿应该了解如何在Perl中编写代码。

在这里,我找到了如何获取所有文件的示例。这不是您的解决方案,但可以帮助您了解如何做:http : //www.perlmonks.org/?node_id=907019

另一个,有关库Net :: FTP的帮助:http : //search.cpan.org/dist/libnet/Net/FTP.pm

使用此方法,您可以打开与服务器的ftp连接(第一个示例)进行授权(第一个示例)

第二个URL帮助您如何使用以下方法获取文件的最后一部分:-> ascii将传输模式设置为ascii,因为这是日志文件-> size(FILE)获取文件大小以计算应该从何处开始-> restart(WHERE)设置文件要从文件中开始读取的地方->读取(BUFFER,SIZE [,TIMEOUT])直接将小SIZE部分读取到BUFFER变量中

另一个功能:length(BUFFER)告诉您获得多少数据。如果是零,则可能已将EOF打印(“ $ BUFFER \ n”)简单的打印缓冲区内容显示到屏幕上

注意,这不是完全解决,而是一种方法。我编写全部内容的唯一原因可能是没有适合您任务的软件。

如果您不知道如何编写该程序,只需在stackoverflow.com而不是超级用户上询问。有很多准备帮助的程序员。

如果可能,请检查您的ftp站点是否支持恢复下载。Whithout文件的读取结束部分是不可能的。

另一部分解决方案可能是日志文件轮换,一天或一个小时一个文件。这取决于日志文件增长的速度。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.