2015-05-23 13 views
13

Ho provato '-N' e '--no-clobber' ma l'unico risultato che ottengo è di recuperare una nuova copia dell'esempio.exe esistente con numero un numero aggiunto usando questo synax 'example.exe.1' . Questo non è quello che mi piacerebbe avere. Ho solo bisogno di scaricare e sovrascrivere il file example.exe nella stessa cartella in cui ho già salvato una copia di example.com senza che wget verifica se il mio è più vecchio o più recente rispetto al file su esempio.exe già presente nella mia cartella di download . Pensi che sia possibile o devo creare uno script che cancelli il file example.exe o qualcosa che cambi la sua data di modifica, ecc?Come forzare wget a sovrascrivere un file esistente ignorando il timestamp?

risposta

18

Se si specifica il file di output utilizzando l'opzione -O, sovrascriverà qualsiasi file esistente.

Ad esempio:

wget -O index.html bbc.co.uk 

eseguito più volte manterranno over-scrittura index.html.

+0

Tocca anche il file quando lo scarica (inclusa la prima volta), quindi il timestamp originale del file non verrà mantenuto così com'è quando non si utilizza l'opzione '-O'. – Synetech

9

wget non consente di sovrascrivere un file esistente a meno che non si chiami esplicitamente il file di output sulla riga di comando con l'opzione -O.

Sono un po 'pigro e non voglio digitare il nome del file di output sulla riga di comando quando è già noto dal file scaricato. Pertanto, io uso curl in questo modo:

curl -O http://ftp.vim.org/vim/runtime/spell/fr.utf-8.spl 

Fare attenzione quando si scaricano file come questo da siti non sicuri. Il comando sopra scriverà un file chiamato come il sito web connesso vuole nominarlo (all'interno della directory corrente però). Il nome finale può essere nascosto tramite reindirizzamenti e script php o essere offuscato nell'URL. Potresti finire per sovrascrivere un file che non vuoi sovrascrivere.

E se si trova un file denominato ls o qualsiasi altro nome allettante nella directory corrente dopo l'utilizzo di curl in questo modo, astenersi dall'esecuzione del file scaricato. Potrebbe essere un trojan scaricato da un sito Web corrotto o danneggiato!

+2

quindi, in pratica, non utilizzare questo metodo –

+0

a meno che non ci si fidi del sito. Proprio come ha detto. I server – gbtimmon

6
wget --backups=1 google.com 

rinomina file originale con .1 suffisso e scrive nuovo file al nome del file desiderato.

Non esattamente quello che è stato richiesto, ma potrebbe essere utile in alcuni casi.

6

-c o --continue

Dal manual:

Se si usa '-c' su un file non vuoto, e il server non supporta continuato a scaricare, Wget riavviare il download da zero e sovrascrive interamente il file esistente.

+2

di solito supportano il download continuo. – teknopaul

2

Mi piace l'opzione -c. Ho iniziato con la pagina man e poi con il web ma l'ho cercato più volte. Ad esempio, se stai trasmettendo una webcam, l'immagine deve sempre essere denominata image.jpg. Sembra che dovrebbe essere più chiaro nella pagina man.

Sto usando questo per un paio di anni per scaricare le cose in background, a volte in combinazione con "Limite-rate =" nel mio file wgetrc

while true 
do 
wget -c -i url.txt && break 
echo "Restarting wget" 
sleep 2 
done 

Fai un po 'url.txt file chiamato e incolla l'URL del file in esso. Imposta questo script sul tuo percorso o magari come alias ed eseguilo. Continua a ritentare il download fino a quando non ci sono errori. A volte alla fine viene visualizzato il ciclo

416 Requested Range Not Satisfiable 
The file is already fully retrieved; nothing to do. 

ma questo è innocuo, basta ctrl-c it. Penso che abbia sempre ottenuto il file che volevo, anche se wget ha esaurito i tentativi o la connessione sparisce temporaneamente. Ho scaricato cose per giorni alla volta con esso. Un'immagine CD su dialup, sì, sempre con wget.

0

Il mio caso d'uso riguarda due URL diversi, a volte il secondo non esiste, ma se esiste, voglio che sovrascriva il primo file.

Il problema dell'utilizzo di wget -O è che, quando il secondo file NON esiste, sovrascrive il primo file con un file BLANK.

Quindi l'unico modo che ho trovato è con un'istruzione if:

controlli --spider se esiste un file, e restituisce 0 se lo fa

--quiet sicuro in silenzio, senza uscita

-nv è tranquilla, ma segnala ancora errori

wget -nv https://example.com/files/file01.png -O file01.png 
# quietly check if a different version exists 
wget --quiet --spider https://example.com/custom-files/file01.png 
if [ $? -eq 0 ] ; then  
    # A different version exists, so download and overwrite the first 
    wget -nv https://example.com/custom-files/file01.png -O file01.png 
fi 

E 'prolisso, ma ho ritenuto necessario. Spero che questo sia utile per qualcuno.

Problemi correlati