Come consentire a wget di sovrascrivere i file


9

Usando il wgetcomando, come posso consentire / istruire di sovrascrivere il mio file locale ogni volta, indipendentemente da quante volte invoco.

Diciamo, voglio scaricare un file dalla posizione: http: //server/folder/file1.html

Qui, ogni volta che dico wget http://server/folder/file1.html, voglio che questo file1.htmlvenga sovrascritto nel mio sistema locale indipendentemente dal momento in cui è cambiato, già scaricato, ecc. La mia intenzione / caso d'uso è che quando chiamo wget, sono molto sicuro di volerlo per sostituire / sovrascrivere il file esistente.

Ho provato le seguenti opzioni, ma ogni opzione è intesa / intesa per qualche altro scopo.

  1. -nc => --no-clobber
  2. -N => Attiva il timestamp
  3. -r => Attiva il recupero ricorsivo

Risposte:


7
wget -q http://www.whatever.com/filename.txt -O /path/filename.txt 

-q è la modalità silenziosa in modo da poterlo lanciare in un cron senza alcun output dal comando


Non esiste alcuna opzione diretta nel wgetcomando che lo faccia senza che io specifichi esplicitamente di usare -O filename?
Gnanam,

3
Sembra che non ci sia modo di forzare la sovrascrittura di tutti i file quando si scaricano file utilizzando wget. Tuttavia, utilizzare l'opzione -N può sicuramente forzare il download e la sovrascrittura di file più recenti. wget -N Sovrascriverà il file originale se cambiano le dimensioni o il timestamp
aleroot

Non vero. dirigere l'output del comando in stdout e reindirizzarlo al file: wget -q $ urlYouNeedToGrap> $ fileYouWantToOverwriteEverytime
rasjani

8

Questa opzione funziona

wget -N http://server/folder/file1.html

Informazioni

-N,  --timestamping            don't re-retrieve files unless newer than
                               local.

4

Usare curlinvece?

curl http://server/folder/file1.html > file1.html

Non sono un esperto di Linux. Qual è la differenza di base tra wgete curl? Sono sicuro che ogni comando è pensato per uno scopo specifico.
Gnanam,

1
@Gnanam: in realtà si sovrappongono molto nell'utilità CLI di base. Entrambi possono stabilire una connessione HTTP e salvare il risultato su disco. Per un riassunto delle differenze, consulta daniel.haxx.se/docs/curl-vs-wget.html Indipendentemente da ciò, l'utilizzo di cui sopra è completo valido. Esistono anche altri strumenti in quest'area generale: curl.haxx.se/docs/comparison-table.html
Stu Thompson,

Quei 2 link sono davvero utili per capire la differenza.
Gnanam,

0

Non penso che tu possa farlo se non scarichi anche le directory (quindi passa il flag -x). Se sai qual è il file, puoi usare -O nomefile, quindi ad esempio:
wget http://yourdomain.com/index.html -O index.html


0

Non provato: forse puoi lavorare con wget -r --level=0.

Un'altra possibilità: curl -Osovrascrive (ma utilizza un modo diverso di scegliere il nome del file, che può o meno interessarti).


Quella wgetriga non fa davvero la cosa giusta perché crea una gerarchia di sottodirectory. curl -Od'altra parte scarica correttamente il file, sovrascrivendo le copie esistenti.
qc

0

Perché non mettere un piccolo wrapper attorno alla wget nella tua sceneggiatura?

Lo script potrebbe spostare tutti i file in una posizione temporanea, quindi wget i file / pagine Web remoti.

In caso di successo, eliminare i file nella posizione temporanea. In caso di errore, spostare indietro i file e generare un errore.

Non c'è un modo semplice per fare ciò che vuoi usando semplicemente wget a meno che tu non conosca specificamente il nome di tutti i file, nel qual caso l'opzione -O ti permetterà di forzare il nome del file scaricato.

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.