wget -o scrive file vuoti in caso di errore


14

Se scrivo wget "nessun tale indirizzo" -o "test.html" crea prima il test.html e in caso di errore lo lascia vuoto. Tuttavia, quando non si utilizza -o, attenderà per vedere se il download ha esito positivo e solo dopo, scriverà il file.

Vorrei applicare quest'ultimo comportamento anche a -o, è possibile?

Risposte:


17

wget restituisce uno stato di uscita diverso da zero quando l'URL non viene trovato, quindi è possibile aggiungere un comando di rimozione in caso di errore:

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

Oppure crea un file temporaneo e spostalo solo dove desideri in caso di successo:

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

Il secondo ha il vantaggio di non eliminare un file esistente in caso di errore, ma assicurati di utilizzare nomi temporanei univoci (vedi man tempfile) se esegui più istanze in parallelo.


Inoltre, aggiungere --retry-connrefused può aiutare a prevenire il file vuoto in primo luogo.
Akom

Se ciò accade in un exec in un manifest di marionette, la modifica di create => file in a meno che => "[-s file]" non possa renderlo autorigenerante.
Akom

13

Come scritto nei commenti, wget -O è più simile a un reindirizzamento della shell che scrive sempre nel file indipendentemente dagli errori.

Puoi curl -finvece usare :

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

Non toccherà il file locale se si verifica un errore durante il recupero del file.


4

La sintassi corretta è

wget "url" -O file

notare la MAIUSCOLA O. Le opzioni -o indicano a wget di scrivere un file di registro , ecco perché è sempre scritto anche in caso di errore.


All'inizio ho pensato che funzionasse, ma poi ho scoperto che non funzionava. provare wget " host.does.not.exist " -O "emptyFile" Viene restituito un errore, ma viene creato il file empty.
Akurtser,

1
@akurtser hai ragione. Penso che non ci sia modo di dire a wget di non creare il file. Ho trovato questa discussione: mail-archive.com/wget@sunsite.dk/msg08586.html in cui discutono della questione. La linea di base è che puoi avere MULTIPLI download nello stesso file in modo che venga creato perché wget non può essere sicuro che TUTTI gli URL falliranno.
Shunz,

Bene grazie, è parte di uno script bash che sto scrivendo, quindi cercherò prima di salvarlo un file temporaneo, che in caso di download riuscito, verrà rinominato. Non molto elegante, ma non riesco a pensare a niente di meglio.
Akurtser

1
@akurtser Sicuramente puoi controllare il codice di ritorno da wget quindi ... dovrebbe dirti se puoi eliminare il file "se non trovato". Quindi non c'è bisogno di temp / rinominare.
Shunz,

1
L'opzione -O è un reindirizzamento, che reindirizza il contenuto scaricato su un file, anche nei casi in cui non sono presenti contenuti. Pertanto, viene sempre creato un file, anche se il download non è riuscito.
Quan al

0

Secondo il documento di aiuto (wget -h), puoi usare l'opzione --spider per saltare il download (versione 1.14).

Download:
  -S,  --server-response         print server response.
       --spider                  don't download anything.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.