Ich suche nach einer einfachen Shell-Prüfung (+ Curl), die als wahr oder falsch bewertet wird, ob eine URL vorhanden ist (gibt 200 zurück) oder nicht.
76
Mit --fail
wird der Exit-Status bei einer fehlgeschlagenen Anforderung ungleich Null. Durch --head
die Verwendung wird das Herunterladen des Dateiinhalts vermieden, da wir ihn für diese Überprüfung nicht benötigen. Durch --silent
die Verwendung wird vermieden, dass Status oder Fehler von der Prüfung selbst ausgegeben werden.
if curl --output /dev/null --silent --head --fail "$url"; then
echo "URL exists: $url"
else
echo "URL does not exist: $url"
fi
Wenn Ihr Server HEAD-Anforderungen ablehnt, können Sie alternativ nur das erste Byte der Datei anfordern:
if curl --output /dev/null --silent --fail -r 0-0 "$url"; then
-o /dev/null
, um das Drucken des Headers auf stdout zu unterdrücken-r 0-0
, nur das erste Byte der Datei anzufordern. Ich habe die Antwort entsprechend geändert.return 0
undreturn 1
für Wahrhaftigkeit und Falschheit, anstatt stdout zu verwenden, um zurückzukehrentrue
undfalse
als Zeichenfolgen. Auf diese Weise kann jemand ausführen:if existURL "$url"
ohne zusätzlichen (ineffizienten) Aufwand für den Versuch, sein Standard zu erfassen und zu interpretieren.Ich finde wget ein besseres Werkzeug dafür als CURL; Es gibt weniger Optionen, an die Sie sich erinnern müssen, und Sie können in bash tatsächlich nach dem Wahrheitswert suchen, um festzustellen, ob dies standardmäßig erfolgreich war oder nicht.
if wget --spider http://google.com 2>/dev/null; then echo "File exists" else echo "File does not exist" fi
Mit dieser
--spider
Option sucht wget nur nach der Datei, anstatt sie herunterzuladen, und2> /dev/null
die stderr-Ausgabe von wget wird stummgeschaltet.quelle
--fail
kann man das gleiche mit locken machen.wget google.com/asdf
undcurl google.com/asdf
.curl
Gibt standardmäßig EXIT_SUCCESS zurück, wenn ein 404-Fehlerwget
auftritt , während EXIT_FAILURE zurückgegeben wird.--spider
Argument da: Es wirdwget
zurückgegeben, nachdem die Existenz der Datei überprüft wurde, anstatt sie herunterzuladen.