Как удалить файл из URL, не загружая весь файл?

419
kramer65

У меня есть система, которая должна получать последние 200 строк из очень большого публичного файла каждый день. Файл выставлен над URL. В настоящее время я запускаю простой скрипт, который выполняет, wgetа затем помещает последние 200 строк в другой файл, после чего исходный файл снова удаляется.

Поскольку исходный файл очень большой (около 250 МБ), большую часть времени выполнения сценария занимает загрузка файла.

Моя система работает нормально, но раздражает, что это занимает так много времени, в том числе и потому, что я часто просто жду этого.

Я нашел предложения, подобные этому, но это в основном делает то же самое, что я делаю сейчас; загрузка всего файла и отслеживание его.

Кто-нибудь знает способ, которым я могу отслеживать публичный файл, не загружая его полностью? Все советы приветствуются!

1
Это похоже на этот вопрос: https://stackoverflow.com/questions/1102229/how-to-watch-a-file-write-in-php/1102346#1102346 gogators 6 лет назад 0

2 ответа на вопрос

0
efotinis

Если сервер, на котором хранится файл, поддерживает продолжение загрузки, вы можете начать загрузку с любого смещения, используя --start-posпараметр wget.

Вам нужно получить размер файла (используя что-то вроде curl -I), вычислить приблизительную оценку последних 200 строк и использовать разницу в качестве начального смещения.

0
xenoid

Если вы используете эту -c|--continueопцию, wgetпросто загрузите недостающую часть и добавьте ее в существующую копию:

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

Не то чтобы это требовало от сервера поддержки опции «Range» HTTP, точно так же, как --start-posопция в ответе @efotinis. Это называется службой байтов .

Похожие вопросы