如何通过 FTP 获取部分文件

如何通过 FTP 获取部分文件

我正在开发一个工具来获取远程系统上一个非常大的文件中隐藏的一些数据。复制整个文件是不切实际的,我需要的所有数据都存在于文件的前 1000 个字节左右。我知道我可以开始获取,然后用 ^C 取消它以获取部分文件,但是这很难(如果不是不可能的话)以任何一致性自动化。

我想告诉我的 ftp 客户端只抓取远程文件的 x 字节,并在抓取到这些字节后立即退出。我发现了一些可以进行部分下载的 Windows 客户端,但我在 ftp 手册页中找不到任何内容,而且在线文档也很少。

我找到了这个方法:http://cdsarc.u-strasbg.fr/doc/ftp.htx这表明语法如下:

ftp> get bigfile.dat:0-5000 bigfile.nxt

我不清楚这是否应该在客户端或服务器上实现,但无论哪种情况,它似乎都无法在我的环境中工作。(标准 Linux FTP 客户端连接到在 z/OS 上运行的 FTP 服务器)

即使在 Linux 标准 FTP 客户端和 Windows 上的 Filezilla 服务器之间进行尝试,我的尝试也会以以下方式失败

ftp> get green.gif:0-10c
local: green.gif:0-10c remote: green.gif:0-10c
227 Entering Passive Mode (9,42,91,226,4,105)
550 File not found

因此,:0-10c 似乎被解释为文件名的一部分。失败。有什么想法吗?

答案1

使用 curl。从手册页中:

   -r/--range <range>
          (HTTP/FTP/FILE)  Retrieve  a byte range (i.e a partial document)
          from a HTTP/1.1, FTP server or a local FILE. Ranges can be spec-
          ified in a number of ways.

          0-499     specifies the first 500 bytes

          500-999   specifies the second 500 bytes

          -500      specifies the last 500 bytes

          9500-     specifies the bytes from offset 9500 and forward

          0-0,-1    specifies the first and last byte only(*)(H)

          500-700,600-799
                    specifies 300 bytes from offset 500(H)

但请注意,服务器必须支持 SIZE 扩展才能使其正常工作。

答案2

我认为你想用 curl 来实现这一点

从手册页中:

   -r/--range <range>
          (HTTP/FTP/FILE)  Retrieve  a byte range (i.e a partial document)
          from a HTTP/1.1, FTP server or a local FILE. Ranges can be spec‐
          ified in a number of ways.

          0-499     specifies the first 500 bytes

          500-999   specifies the second 500 bytes

          -500      specifies the last 500 bytes

          9500-     specifies the bytes from offset 9500 and forward

答案3

此类方案很大程度上取决于服务器的实现。有些服务器支持的功能比其他服务器多得多。

我会研究某种分割文件的方法,或者考虑使用自定义应用程序来发送您要求的范围。

相关内容