Есть ли параметр curl/wget, который говорит, что не сохранять файлы при ошибках HTTP?
Я хочу загрузить много URL-адресов в script, но я не хочу сохранять те, которые приводят к ошибкам HTTP.
Насколько я могу судить по страницам man, ни curl
, ни wget
не предоставляют такую функциональность.
Кто-нибудь знает о другом загрузчике, который делает?
Ответы
Ответ 1
Один вкладыш, который я только установил для этой цели:
(работает только с одним файлом, может быть полезным для других)
A=$$; ( wget -q "http://foo.com/pipo.txt" -O $A.d && mv $A.d pipo.txt ) || (rm $A.d; echo "Removing temp file")
Это попытается загрузить файл с удаленного хоста. Если есть Ошибка, файл не сохраняется. Во всех остальных случаях он сохранялся и переименовывался.
Ответ 2
Я думаю, что опция -f
для curl
делает то, что вы хотите:
-f
, --fail
(HTTP) Неисправность (без вывода на выходе) при ошибках сервера. В основном это делается для улучшения включить скрипты и т.д., чтобы лучше справляться с неудачными попытками. В обычных случаях, когда HTTP сервер не может предоставить документ, он возвращает HTML-документ, указывающий так (что часто также описывает, почему и многое другое). Этот флаг предотвратит вывод завитка из этого и обратная ошибка 22. [...]
Однако, если ответ был фактически перенаправлением 301 или 302, который все равно сохраняется, даже если его назначение приведет к ошибке:
$ curl -fO http://google.com/aoeu
$ cat aoeu
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/aoeu">here</A>.
</BODY></HTML>
Чтобы выполнить перенаправление на его тупик, также дайте опцию -L
:
-L
, --location
(HTTP/HTTPS) Если сервер сообщает, что запрошенная страница переместилась на другую (указано с заголовком Location: и кодом ответа 3XX), этот параметр будет сделайте завиток повторить запрос на новом месте. [...]
Ответ 3
Древняя нить.. приземлился здесь, ища решение... в итоге написал код оболочки, чтобы сделать это.
if [ `curl -s -w "%{http_code}" --compress -o /tmp/something \
http://example.com/my/url/` = "200" ]; then
echo "yay"; cp /tmp/something /path/to/destination/filename
fi
Это будет загружать выходные данные в файл tmp и создавать/перезаписывать выходной файл только в том случае, если статус был 200. Мой пользовательский учет немного отличается... в моем случае вывод занимает > 10 секунд для генерации... и я не сделал хотите, чтобы файл назначения оставался пустым для этой продолжительности.
Ответ 4
У меня есть обходное решение для предложения, оно загружает файл, но оно также удаляет его, если его размер равен 0 (что происходит, если происходит 404).
wget -O <filename> <url/to/file>
if [[ (du <filename> | cut -f 1) == 0 ]]; then
rm <filename>;
fi;
Он работает для zsh, но вы можете адаптировать его для других оболочек.
Но это только сохраняет его на первом месте, если вы предоставляете опцию -O
Ответ 5
Вы можете загрузить файл без сохранения с помощью опции "-O -"
в качестве
wget -O - http://jagor.srce.hr/
Вы можете получить более подробную информацию в http://www.gnu.org/software/wget/manual/wget.html#Advanced-Usage