So erhalten Sie per FTP nur einen Teil einer Datei

So erhalten Sie per FTP nur einen Teil einer Datei

Ich arbeite an einem Tool, um Daten abzurufen, die in einer sehr großen Datei auf einem Remote-System vergraben sind. Es wäre unpraktisch, die gesamte Datei zu kopieren, und alle Daten, die ich brauche, befinden sich in den ersten etwa 1000 Bytes der Datei. Ich weiß, dass ich einen Get-Vorgang starten und ihn einfach mit ^C abbrechen kann, um eine Teildatei abzurufen, aber dies wäre schwierig (wenn nicht unmöglich) mit irgendeiner Konsistenz zu automatisieren.

Ich möchte meinem FTP-Client sagen, dass er nur x Bytes der Remote-Datei abrufen und beenden soll, sobald er sie hat. Ich habe einige Windows-Clients gefunden, die Teildownloads durchführen, aber ich habe nichts auf der FTP-Manpage gefunden und die Online-Dokumentation ist spärlich.

Ich habe dieses HowTo gefunden:http://cdsarc.u-strasbg.fr/doc/ftp.htxdas legt die folgende Syntax nahe:

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

Mir ist nicht klar, ob dies im Client oder im Server implementiert werden soll, aber in beiden Fällen scheint es in meiner Umgebung nicht zu funktionieren. (Standard-Linux-FTP-Client stellt eine Verbindung zu einem FTP-Server her, der unter z/OS läuft)

Selbst wenn ich es zwischen dem Linux-Standard-FTP-Client und einem Filezilla-Server unter Windows versuche, schlagen meine Versuche auf folgende Weise fehl

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

Also wird :0-10c anscheinend als Teil des Dateinamens interpretiert. Fehlgeschlagen. Irgendwelche Ideen?

Antwort1

Verwenden Sie curl. Aus der Manpage:

   -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)

Beachten Sie jedoch, dass die SIZE-Erweiterung vom Server unterstützt werden muss, damit dies funktioniert.

Antwort2

Ich denke, Sie möchten hierfür curl verwenden

Aus der Manpage:

   -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

Antwort3

Solche Schemata hängen stark von der Implementierung des Servers ab. Einige Server unterstützen viel mehr Funktionen als andere.

Ich würde nach einer Möglichkeit suchen, die Datei aufzuteilen, oder eine benutzerdefinierte Anwendung in Betracht ziehen, die den gewünschten Bereich sendet.

verwandte Informationen