Вопрос или проблема
Как мне возобновить частично загруженный файл с помощью инструмента командной строки Linux?
Я частично загрузил большой файл, т.е. 400 МБ из 900 МБ из-за отключения электроэнергии, но когда я начинаю загрузку снова, она начинается с нуля. Как мне начать с 400 МБ?
Поскольку вы не уточнили, я предполагаю, что вы используете wget
для загрузки файла. Если это так, попробуйте использовать его с опцией -c
(например, wget -c <URL>
).
Обратите внимание, что в случае использования протокола ftp (URL выглядит как ftp://...
) существует вероятность того, что удаленный сервер использует старый/древний ftp-демон, который не поддерживает возобновление загрузок (новые ftp-демоны поддерживают это более десяти лет, так что это просто небольшая вероятность). Если это так, вам может не повезти. С другой стороны, у вас не должно возникнуть проблем, если используется протокол http. (ОБНОВЛЕНИЕ: Согласно мнению других экспертов (включая Жиля в комментариях ниже), возобновление при использовании http также зависит от поддержки сервера, так что это относится и к ftp, и к http).
Удачи.
Если нужно загрузить несколько файлов и загрузка была прервана на одном из файлов, то -c вместе с -r может помочь.
wget -c -r <url>
Эта команда проверит все файлы и загрузит только те, которые неполные или не были загружены. Мне пришлось загрузить более ста больших файлов, и я использовал следующие параметры, чтобы быть учтивым к серверу:
wget -c -r -np -k --wait=15 --limit-rate=50K <url>
curl -C -
Если вы хотите использовать curl
вместо wget
:
curl -C - -o index.html https://example.com
Из man
:
Используйте “‐C -“, чтобы сказать curl автоматически определить, где/как возобновить передачу. Он затем использует указанные выходные/входные файлы для этого.
Мы можем быстро и грязно протестировать это с помощью:
printf asdf > index.html
curl -C - -o index.html https://example.com
и теперь index.html
начинается с:
asdfctype html>
<html>
так что явно были пропущены первые 4 символа <!do
при загрузке, поскольку файл уже имел их, без asdf
файл был бы:
<!doctype html>
<html>
Проверка возможностей сервера: accept-ranges: bytes
Инкрементальная загрузка работает на example.com
потому что согласно:
curl -I https://example.com
сервер возвращает:
accept-ranges: bytes
HTTP-заголовок, что означает, что curl может запрашивать ranges:
запрашивая начать с середины:
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges
- https://datatracker.ietf.org/doc/html/rfc7233
Примеры сайтов, которые имеют accept-ranges: bytes
:
- archive.org (тестировалось в ноябре 2024)
Тестировалось на Ubuntu 23.10, curl 8.2.1.
Я понимаю, что означает оригинальный вопрос, и ответ не wget -c …
Сценарий можно описать так:
# Начать зеркалирование сайта
wget -m http://...
# 400 МБ позже wget умер или был прерван,
# не знаю, где он остановился, не важно,
# просто хочу получить оставшиеся 100 МБ, не получая первые 400 МБ снова
wget -nc -r -l inf --no-remove-listing http://...
Опции “-r -l inf –no-remove-listing” эквивалентны -m без параметра -N. Добавление параметра -nc позволяет избежать сохранения первых 400 МБ уже на вашем жестком диске.
Вот что я сделал:
-
Сначала перейдите в расположение, содержащее прерванный файл на вашем компьютере, если имя файла
newfile.txt
, вы найдете 2 файла,newfile.txt
иnewfile.txt.part
, файлnewfile.txt.part
содержит загруженное содержимое, поэтому удалите файлnewfile.txt
и переименуйтеnewfile.txt.part
вnewfile.txt
. -
Вам также понадобится URL файла, это может быть что-то вроде
https://www.downloadsite.com/newfile.txt
. Вы можете получить его из вкладки загрузок вашего браузера. -
Используя
wget
, откройте терминал с рабочим каталогом, как каталог, который содержит прерванный файл, затем выполните:wget -c "https://www.downloadsite.com/newfile.txt" -O "newfile.txt"
(замените URL и имя файла на ваш актуальный URL и имя файла).
Ответ или решение
Как возобновить прерванную загрузку файла с помощью командной строки Linux
Если вы столкнулись с ситуацией, когда загрузка большого файла была прервана, и вы хотите продолжить скачивание с того места, где вы остановились, существует несколько инструментов и методов на Linux, которые помогут вам решить эту проблему. Я детально опишу процесс, используя наиболее распространенные инструменты – wget
и curl
.
Использование wget
-
Установка
wget
:
Убедитесь, чтоwget
установлен на вашей системе. Вы можете установить его с помощью пакетного менеджера. Для Ubuntu или Debian выполните:sudo apt update sudo apt install wget
-
Возобновление загрузки с помощью
wget
:
Предположим, что ваш файл был частично загружен, и вы хотите продолжить скачивание. При этом важно, чтобы сервер поддерживал возобновление загрузки (это можно проверить по заголовку HTTPAccept-Ranges: bytes
). Вы можете использовать следующую команду:wget -c <URL>
Здесь
-c
обозначает "continue" (продолжить), благодаря чемуwget
попытается возобновить загрузку с того места, где она была прервана. -
Работа с множеством файлов:
Если вы загружаете несколько файлов и хотите проверить их целостность:wget -c -r -np -k --wait=15 --limit-rate=50K <URL>
В этом случае:
-r
: рекурсивная загрузка.-np
: не подниматься на уровень выше.-k
: конвертировать ссылки для локальной работы.--wait=15
: ожидание между запросами в 15 секунд.--limit-rate=50K
: ограничение скорости загрузки до 50 КБ/с.
Использование curl
-
Установка
curl
:
Убедитесь, чтоcurl
установлен на вашей системе. Для установки используйте:sudo apt update sudo apt install curl
-
Возобновление загрузки с помощью
curl
:
Чтобы продолжить загрузку, вы можете использовать команду:curl -C - -o <имя_файла> <URL>
В этой команде
-C -
указываетcurl
автоматически определить, с какого места продолжить загрузку. Параметр-o
указывает имя выходного файла. -
Проверка поддержки сервером:
Чтобы убедиться, поддерживает ли сервер возобновление загрузок, вы можете выполнить:curl -I <URL>
Проверьте, есть ли в ответе заголовок
Accept-Ranges: bytes
. Это подтвердит, что сервер поддерживает возобновление.
Дополнительные рекомендации
-
Проверка состояния загруженного файла: Если у вас есть файл с расширением
.part
, это может указывать на его частичное завершение. Вы можете переименовать его:mv newfile.txt.part newfile.txt
-
Замена файла: Если вы хотите использовать
wget
с уже существующим файлом (например,newfile.txt
), замените его командой:wget -c "https://www.downloadsite.com/newfile.txt" -O "newfile.txt"
Заключение
Итак, возобновление скачивания с помощью wget
или curl
— это довольно простая, но очень полезная функция, которая позволяет экономить время и трафик, особенно при скачивании больших файлов. Убедитесь, что ваш сервер поддерживает возобновление, и воспользуйтесь приведенными выше командами для успешного завершения загрузки.