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

Я пробовал «-N» и «--no-clobber», но единственный результат, который я получаю, — это получение новой копии существующего файла example.exe с числом, добавленным с использованием этого синтаксиса «example.exe.1». Это не то, что я хотел бы получить. Мне просто нужно загрузить и перезаписать файл example.exe в той же папке, где я уже сохранил копию example.com, без этого wget проверяет, является ли моя старее или новее, уважайте файл example.exe, уже присутствующий в моей папке загрузки. . Как вы думаете, это возможно, или мне нужно создать сценарий, который удалит файл example.exe или, может быть, что-то, что изменит дату его модификации и т. Д.?


person Andrew Nexintong    schedule 23.05.2015    source источник


Ответы (7)


Если вы укажете выходной файл с помощью параметра -O, он перезапишет любой существующий файл.

Например:

wget -O index.html bbc.co.uk

Запуск несколько раз приведет к перезаписыванию index.html.

person PeterSW    schedule 24.05.2015
comment
Он также коснется файла при его загрузке (включая первый раз), поэтому исходная метка времени файла не будет сохранена, как если бы не использовался переключатель -O. - person Synetech; 28.03.2016

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

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

curl -O http://ftp.vim.org/vim/runtime/spell/fr.utf-8.spl

Будьте осторожны при загрузке подобных файлов с небезопасных сайтов. Приведенная выше команда запишет файл с именем, которое подключенный веб-сайт хочет назвать (хотя и внутри текущего каталога). Окончательное имя может быть скрыто с помощью перенаправлений и php-скриптов или запутано в URL-адресе. Вы можете в конечном итоге перезаписать файл, который вы не хотите перезаписывать.

И если вы когда-нибудь найдете файл с именем ls или любым другим заманчивым именем в текущем каталоге после использования curl таким образом, воздержитесь от выполнения загруженного файла. Это может быть троян, загруженный с мошеннического или поврежденного веб-сайта!

person Frédéric Marchal    schedule 26.02.2016
comment
Классная информация, но полностью игнорирует вопрос ОП... - person Jesse Nickles; 04.02.2021
comment
Он отвечает на вопрос :) Он говорит, что нужно использовать wget https://url.com -O filename_to_squash.py -- и более того, он объясняет, почему нужно быть осторожным при загрузке и запуске исполняемых файлов! - person duhaime; 20.04.2021

wget --backups=1 google.com

переименовывает исходный файл с суффиксом .1 и записывает новый файл с предполагаемым именем файла.

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

person Antony Hatchkins    schedule 05.08.2016

-c or --continue

Из руководства:

Если вы используете «-c» для непустого файла, а сервер не поддерживает продолжение загрузки, Wget перезапустит загрузку с нуля и полностью перезапишет существующий файл.

person eozzy    schedule 14.09.2016
comment
серверы обычно поддерживают непрерывную загрузку. - person teknopaul; 03.11.2016
comment
Это примечание, если сервер не поддерживает непрерывную загрузку, а не поведение по умолчанию. Так что этот ответ неверен. - person mgutt; 27.11.2019
comment
-c кажется отличной идеей, но она не проверяет, изменилось ли содержимое файла, если вы регулярно загружаете (также известный как сценарий) файл, который обновляется с течением времени -c вас укусит. - person plastic; 07.12.2020

Мне нравится опция -c. Я начал с справочной страницы, затем в Интернете, но искал ее несколько раз. Например, если вы транслируете веб-камеру, изображение всегда должно называться image.jpg. Кажется, это должно быть более ясно на странице руководства.

Я использую это в течение нескольких лет для загрузки вещей в фоновом режиме, иногда в сочетании с «limit-rate =» в моем файле wgetrc.

while true
do
wget -c -i url.txt && break
echo "Restarting wget"
sleep 2
done

Создайте небольшой файл с именем url.txt и вставьте в него URL-адрес файла. Установите этот скрипт на свой путь или, возможно, в качестве псевдонима и запустите его. Он продолжает повторять загрузку, пока не будет ошибки. Иногда в конце он зацикливается, отображая

 416 Requested Range Not Satisfiable
 The file is already fully retrieved; nothing to do.

но это безвредно, просто нажмите Ctrl-C. Я думаю, что он всегда получал нужный мне файл, даже если wget исчерпал количество попыток или соединение временно прервалось. Я загружал вещи в течение нескольких дней с ним. Образ компакт-диска по диалапу, да, всегда с помощью wget.

person Alan Corey    schedule 16.06.2017

Мой вариант использования включает два разных URL-адреса, иногда второй не существует, но если он существует, я хочу, чтобы он перезаписывал первый файл.

Проблема использования wget -O заключается в том, что, когда второй файл НЕ существует, он перезапишет первый файл ПУСТЫМ файлом.

Так что единственный способ, который я мог найти, - это оператор if:

--spider checks if a file exists, and returns 0 if it does
--quiet fail quietly, with no output
-nv is quiet, but still reports errors

wget -nv https://example.com/files/file01.png -O file01.png
# quietly check if a different version exists
wget --quiet --spider https://example.com/custom-files/file01.png
if [ $? -eq 0 ] ; then    
    # A different version exists, so download and overwrite the first
    wget -nv https://example.com/custom-files/file01.png -O file01.png
fi

Это многословно, но я нашел это необходимым. Я надеюсь, что это полезно для кого-то.

person comfytoday    schedule 08.01.2018

Вот простой способ сделать это с обрезкой параметров

url=https://example.com/example.exe ; wget -nv $url -O ${url##*/}

Или вы можете использовать базовое имя

url=https://example.com/example.exe ; wget -nv $url -O $( basename $url )
person Curt G    schedule 16.07.2021