2012-08-30 3 views

risposta

69

L'utilizzo di --fail renderà lo stato di uscita diverso da zero su una richiesta non riuscita. L'utilizzo di --head eviterà di scaricare il contenuto del file, poiché non è necessario per questo controllo. L'utilizzo di --silent eviterà che lo stato o gli errori vengano emessi dal controllo stesso.

if curl --output /dev/null --silent --head --fail "$url"; then 
    echo "URL exists: $url" 
else 
    echo "URL does not exist: $url" 
fi 

Se il server rifiuta le richieste HEAD, in alternativa è quella di richiedere solo il primo byte del file:

if curl --output /dev/null --silent --fail -r 0-0 "$url"; then 
+4

Includere '-o/dev/null' per sopprimere la stampa dell'intestazione sullo stdout –

+0

@ShawnChin Buona chiamata, grazie. –

+0

Ottimo .... Funziona bene. Grazie –

13

trovo wget per essere uno strumento migliore per questo che CURL; ci sono meno opzioni da ricordare e puoi effettivamente verificare il suo valore di verità in bash per vedere se è riuscito o meno per impostazione predefinita.

if wget --spider http://google.com 2>/dev/null; then 
    echo "File exists" 
else 
    echo "File does not exist" 
fi 

L'opzione --spider rende wget basta controllare per il file invece di scaricare, e 2> /dev/null silenzi di wget uscita stderr.

+0

Il "può effettivamente verificare il suo valore di verità in bash" non è univoco per wget; con '--fail', si può fare lo stesso con arricciatura. –

+3

Ecco perché ho detto "per impostazione predefinita". Prova a eseguire "wget ​​google.com/asdf" e "arricciare google.com/asdf". 'arricciata' restituisce EXIT_SUCCESS di default quando incontra un errore 404, mentre' wget' restituisce EXIT_FAILURE. – ailnlv

+0

Questa soluzione funziona meglio per me almeno – raffi

Problemi correlati