Cómo permitir que wget sobrescriba archivos

9

Usando el wgetcomando, ¿cómo permito / ordeno sobrescribir mi archivo local cada vez, independientemente de cuántas veces invoque?

Digamos que quiero descargar un archivo desde la ubicación: http: //server/folder/file1.html

Aquí, cada vez que digo wget http://server/folder/file1.html, quiero que esto file1.htmlse sobrescriba en mi sistema local, independientemente de la hora en que se cambie, ya se descargue, etc. Mi intención / caso de uso aquí es que cuando llamo a wget, estoy muy seguro de querer para reemplazar / sobrescribir el archivo existente.

He probado las siguientes opciones, pero cada opción está destinada / destinada a algún otro propósito.

  1. -nc => --no-clobber
  2. -N => Activar sellado de tiempo
  3. -r => Activar recuperación recursiva
Gnanam
fuente

Respuestas:

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

-q es el modo silencioso, por lo que puede lanzarlo en un cron sin ningún resultado del comando

aleroot
fuente
¿No hay una opción directa en el wgetcomando que haga esto sin que yo especifique explícitamente el uso -O filename?
Gnanam
3
Parece que no hay forma de forzar la sobrescritura de todos los archivos al descargar archivos usando wget. Sin embargo, usar la opción -N seguramente puede forzar la descarga y sobrescribir los archivos más nuevos. wget -N sobrescribirá el archivo original si el tamaño o la marca de tiempo cambian
aleroot
No es verdad. dirija la salida del comando a stdout y canalícela al archivo: wget -q $ urlYouNeedToGrap> $ fileYouWantToOverwriteEverytime
rasjani
8

Esta opción funciona

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

informacion

-N,  --timestamping            don't re-retrieve files unless newer than
                               local.
Steven Penny
fuente
4

Usar en su curllugar?

curl http://server/folder/file1.html > file1.html
Stu Thompson
fuente
No soy un experto en Linux. ¿Cuál es la diferencia básica entre wgety curl? Estoy seguro de que cada comando tiene un propósito específico.
Gnanam
1
@Gnanam: se superponen mucho en la utilidad CLI básica, en realidad. Ambos pueden hacer una conexión HTTP y guardar el resultado en el disco. Para ver las diferencias, consulte daniel.haxx.se/docs/curl-vs-wget.html Independientemente, el uso anterior es completamente válido. También hay otras herramientas en esta área general: curl.haxx.se/docs/comparison-table.html
Stu Thompson
Esos 2 enlaces son realmente útiles para entender la diferencia.
Gnanam
0

No creo que pueda hacerlo a menos que también descargue los directorios (así que pase el indicador -x). Si sabe cuál es el archivo, puede usar -O nombre de archivo, por ejemplo:
wget http://yourdomain.com/index.html -O index.html

James L
fuente
0

Sin probar: tal vez puedas trabajar wget -r --level=0.

Otra posibilidad: curl -Osobrescribe (pero utiliza una forma diferente de elegir el nombre del archivo, que puede o no importarle).

Gilles 'SO- deja de ser malvado'
fuente
Esa wgetlínea realmente no hace lo correcto porque crea una jerarquía de subdirectorios. curl -Opor otro lado descarga correctamente el archivo, sobrescribiendo las copias existentes.
sth
0

¿Por qué no colocas un pequeño contenedor alrededor del wget en tu script?

La secuencia de comandos podría mover todos los archivos a una ubicación temporal y luego eliminar los archivos remotos / páginas web.

En caso de éxito, elimine los archivos en la ubicación temporal. En caso de falla, mueva los archivos hacia atrás y genere un error.

No hay una manera simple de hacer lo que quiere usando solo wget a menos que sepa específicamente el nombre de todos los archivos, en cuyo caso la opción -O le permitirá forzar el nombre del archivo descargado.

Richard Holloway
fuente