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.
Antworten:
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
-r 0-0
, nur das erste Byte der Datei anzufordern. Ich habe die Antwort entsprechend geändert.
return 0
und return 1
für Wahrhaftigkeit und Falschheit, anstatt stdout zu verwenden, um zurückzukehren true
und false
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, und 2> /dev/null
die stderr-Ausgabe von wget wird stummgeschaltet.
--fail
kann man das gleiche mit locken machen.
wget google.com/asdf
und curl google.com/asdf
. curl
Gibt standardmäßig EXIT_SUCCESS zurück, wenn ein 404-Fehler wget
auftritt , während EXIT_FAILURE zurückgegeben wird.
--spider
Argument da: Es wird wget
zurückgegeben, nachdem die Existenz der Datei überprüft wurde, anstatt sie herunterzuladen.
-o /dev/null
, um das Drucken des Headers auf stdout zu unterdrücken