13

Если я напишу wget "нет такого адреса" -o «test.html», он сначала создаст test.html, а в случае сбоя оставит его пустым. Однако, если не использовать -o, он будет ждать, пока загрузка удастся, и только после этого он запишет файл.

Я бы хотел, чтобы последнее поведение также применялось к -о, возможно ли это?

3 ответа3

17

wget возвращает ненулевой статус выхода, когда URL не найден, поэтому вы можете добавить команду удаления при ошибке:

wget "url" -O file || rm -f file

Или создайте временный файл и перемещайте его только в том случае, если хотите, в случае успеха

wget "url" -O /tmp/wget && mv /tmp/wget file

Второе преимущество заключается в том, что не удаляется существующий файл при сбое, но обязательно используйте уникальные временные имена (см. man tempfile), если вы запускаете несколько экземпляров параллельно.

10

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

Вместо этого вы можете использовать curl -f :

curl -f http://nonexistent/file.jpg -o localfile.jpg

Он не коснется локального файла, если при загрузке файла произошла ошибка.

4

Правильный синтаксис

wget "url" -O file

обратите внимание на верхний регистр O. Опции -o заставляют wget записывать файл журнала, поэтому он всегда записывается даже при сбое.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .