Wie kann ich die Datei von der URL abschneiden, ohne die gesamte Datei herunterzuladen?
489
kramer65
Ich habe ein System, das täglich die neuesten 200 Zeilen aus einer sehr großen öffentlichen Datei abrufen muss. Die Datei wird über eine URL angezeigt. Derzeit führe ich ein einfaches Skript aus, das ein wgetund dann die letzten 200 Zeilen in eine andere Datei umwandelt. Danach wird die Originaldatei wieder gelöscht.
Da die Originaldatei sehr groß ist (ca. 250 MB), wird das Skript meistens durch Herunterladen der Datei in Anspruch genommen.
Mein System funktioniert gut, aber es ist nur ärgerlich, dass es so lange dauert, auch weil ich oft nur darauf warte.
Ich habe Vorschläge wie diesen gefunden, aber das macht im Grunde dasselbe wie jetzt; Laden Sie die gesamte Datei herunter und schließen Sie sie ab.
Weiß jemand einen Weg, wie ich die öffentliche Datei ohne vollständigen Download bearbeiten kann? Alle Tipps sind willkommen!
Diese Frage ähnelt dieser Frage: https://stackoverflow.com/questions/1102229/how-to-watch-a-file-write-in-php/1102346#1102346
gogators vor 6 Jahren
0
2 Antworten auf die Frage
0
efotinis
Wenn der Server, auf dem die Datei gespeichert ist, den fortlaufenden Download unterstützt, können Sie den Download von jedem Offset aus mit der --start-posOption von starten wget.
Sie müssen die Dateigröße ermitteln (mit etwas ähnlichem curl -I), eine grobe Schätzung der letzten 200 Zeilen berechnen und die Differenz als Startoffset verwenden.
0
xenoid
Wenn Sie die -c|--continueOption verwenden, wgetwird der fehlende Teil einfach heruntergeladen und zu Ihrer vorhandenen Kopie hinzugefügt:
-c --continue Continue getting a partially-downloaded file. This is useful when you want to finish up a download started by a previous instance of Wget, or by another program. For instance: wget -c ftp://sunsite.doc.ic.ac.uk/ls-lR.Z If there is a file named ls-lR.Z in the current directory, Wget will assume that it is the first portion of the remote file, and will ask the server to continue the retrieval from an offset equal to the length of the local file.
Es ist nicht erforderlich, dass der Server die Option "Range" von HTTP unterstützt, genau wie die --start-posOption in der Antwort von @efotinis. Dies wird als Byte-Serving bezeichnet .