Как заставить wget перезагрузить файл заново?

Вопрос или проблема

Я неожиданно узнал, что wget не скачивает заново, если файл с таким же именем уже существует.

Есть ли опция, чтобы заставить его скачать заново без удаления файла сначала в Linux?

wget -O - $url >/path/to-file

Или, если вы зеркалируете, вы можете использовать флаг -c. Это приведет к “продолжению” файлов, но так как они уже соответствуют размеру, который сервер указывает wget, они будут “продолжены” с начала.

Это во многом зависит от того, какие опции вы задаете wget в командной строке. Я обнаружил, что поведение по умолчанию на моих системах — это повторная загрузка, но с добавлением номера к имени файла, чтобы сделать его другим.

Вот описание опции --no-clobber из man wget (для wget 1.11.4) — обратите внимание на взаимодействия с другими опциями, особенно -r и -p. (Выделение мое.)

-nc
–no-clobber
Если файл загружается более одного раза в одном каталоге, поведение Wget
зависит от нескольких опций, включая -nc. В некоторых случаях
локальный файл будет перезаписан при повторной загрузке. В
других случаях он будет сохранен.

При запуске Wget без -N, -nc, -r, или -p, загрузка того же файла в
том же каталоге приведет к сохранению оригинальной копии файла,
а вторая копия будет называться file.1.
Если этот файл будет загружен
еще раз, третья копия будет называться file.2, и так далее. Когда указано
-nc, это поведение будет подавлено, и Wget откажется загружать
новые версии файла. Поэтому “no-clobber” на самом деле
является неправильным названием в этом режиме — это не предотвращение перезаписи
(поскольку числовые суффиксы уже предотвращали перезапись), а
предотвращение множественного сохранения версий.

При запуске Wget с -r или -p, но без -N или -nc, повторная загрузка
файла приведет к тому, что новая копия просто перезапишет старую. Добавление -nc
предотвратит это поведение, вместо этого оригинальная версия будет
сохранена, а любые новые версии на сервере будут игнорироваться.

Когда Wget запущен с -N, с или без -r или -p, решение о том,
загружать ли более новую копию файла, зависит от локальной и
удаленной метки времени и размера файла. -nc не может быть указан одновременно
с -N.

Обратите внимание, что когда указано -nc, файлы с суффиксами .html или .htm будут
загружаться с локального диска и анализироваться так, как если бы они были получены
из Интернета.

Даже если /path/to/file существует, он будет перезаписан следующим образом:

wget "$URL" -O /path/to/file

Дополнительно, есть также опция –unlink:

--unlink                    удалить файл перед перезаписью

Это контролируется с помощью опции -nc или --no-clobber.

Это сложно и зависит от других опций, но у вас есть выбор перезаписи или переименования загруженных повторно файлов file.1, file.2

Судя по руководству, если вы не используете опцию ‘no-clobber’, повторно загруженные файлы будут перенумероваться. Вы видите файлы с цифровыми суффиксами?

В любом случае, смотрите man-пейдж

.

Ответ или решение

Чтобы решить задачу принудительной перезагрузки файла с помощью wget в Linux, необходимо детально разобраться в механизмах работы этой утилиты с существующими файлами.

Теория

Команда wget представляет собой мощный инструмент командной строки для скачивания файлов из интернета. Она поддерживает различные протоколы передачи данных, такие как HTTP, HTTPS и FTP. Однако при повторной загрузке файлов с одинаковыми именами wget ведет себя по-разному в зависимости от используемых параметров.

Основной вопрос, возникающий у пользователей, касается того, как заставить wget перескачать файл без предварительного удаления существующего. Стандартное поведение wget заключается в предотвращении перезаписи, если файл уже существует. Вместо этого он может добавить числовой суффикс к имени файла.

Пример использования команд и их объяснение

  1. Параметр -O <filename>

    Этот параметр позволяет указать имя файла, в который будет сохранено содержимое. Например:

    wget "$URL" -O /path/to/file

    В этом случае wget явно перезапишет файл /path/to/file, даже если он уже существует. Это один из простейших способов принудительного перезаписи файла.

  2. Отключение защитного механизма с помощью --no-clobber

    Параметр --no-clobber или -nc используется для предотвращения перезаписи существующего файла. Применяя его, вы фактически запрещаете wget загружать файл, если он уже существует в той же директории. Примечание: использование этого параметра совместно с опцией зеркалирования часто нежелательно.

  3. Удаление файла перед загрузкой с помощью --unlink

    Существует опция --unlink, которая позволяет удалить файл перед его перезаписью:

    wget --unlink "$URL" -O /path/to/file

    Это гарантирует, что файл будет перезаписан без необходимости предварительного ручного удаления.

  4. Контроль на основе параметров -N

    Параметр -N (--timestamp) позволяет wget загружать файлы только в том случае, если удаленный файл новее локального. Это полезно для синхронизации, но не решает вопрос принудительного перезагрузки.

  5. Другая стратегия: обход механизма переименования

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

Применение в практическом контексте

Для практического применения команд wget, рекомендуется определить, хотите ли вы перезаписать файлы или сохранить все версии. В случае сохранения всех версий, wget будет добавлять числа к имени файла (например, file.1, file.2). Если же необходимо обновление файла без его переименования, следует использовать параметр -O или опцию --unlink для предварительного удаления.

Дополнительные рекомендации

  1. Сценарии автоматизации

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

  2. Логирование и отладка

    Для отладки и мониторинга рекомендуется использовать параметры -d (--debug) и -v (--verbose), которые предоставляют более подробную информацию о процессе загрузки.

  3. Безопасность и резервное копирование

    В критически важных системах использование wget наряду с автоматическим удалением файлов может потребовать настройки резервных копий, чтобы избежать нежелательной потери данных.

  4. Использование разрешения для перекрытия

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

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

Оцените материал
Добавить комментарий

Капча загружается...