Si ejecuto wget dos veces, no reconoce que ya ha descargado ese archivo y crea uno nuevo. ¿Hay alguna manera de evitar que descargue el archivo nuevamente?
$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...
$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png.1’
...
(Feliz de usar curl o una alternativa similar con secuencia de comandos si wget no puede hacer esto).
Respuestas:
Te sugiero que uses la
-N
opción.Permite la marca de tiempo, que vuelve a descargar el archivo solo si es más reciente en el servidor que la versión descargada.
Advertencia (del comentario de KasiyA)
Si el servidor no está configurado correctamente, siempre puede informar que el archivo es nuevo y
-N
siempre lo volverá a descargar. En este caso,-nc
es probablemente una mejor opción.fuente
-N
puede fallar y wget siempre se volverá a descargar. Así que a veces-nc
es mejor que-N
Sí, es una
-c
opción.Si el archivo es el mismo, se detendrá el segundo intento de descarga.
Advertencias (de los comentarios de jofel)
Si el archivo ha cambiado en el servidor, la
-c
opción puede dar resultados incorrectos.Con
-c
, wget simplemente le pide al servidor cualquier información más allá de la parte del archivo ya descargado, nada más. No comprueba si hubo algún cambio en la parte del archivo que ya se descargó. Por lo tanto, podría encontrar un archivo dañado que es una mezcla del archivo antiguo y el nuevo.Prueba local
Puede probarlo ejecutando un servidor web local simple de la siguiente manera (Gracias a la respuesta de @roadmr ):
Abra una ventana de Terminal y escriba:
Ahora abra otra Terminal y haga:
Tenga en cuenta que
filename-to-download
es el archivo que se encuentra en el/path/to/parent-download-dir/
que queremos descargarlo.Ahora, si ejecuta el comando wget varias veces, verá:
Ok, ahora vaya al
/path/to/parent-download-dir/
directorio y agregue algo al archivo fuente, por ejemplo, si es un archivo de texto, agregue una línea adicional simple y guarde el archivo. Ahora intenta conwget -c ...
. Genial, ahora verá que el archivo se vuelve a descargar nuevamente, pero ya lo ha descargado antes.Motivo: ¿por qué volver a descargar?
porque su tamaño cambió a un tamaño mayor que el antiguo archivo descargado y nada más.
fuente
-nc
no es como dijiste, pero la-c
opción funcionará y es por eso que mencioné la-c
opción primero.-c
,wget
solicita al servidor cualquier dato más allá de la parte del archivo ya descargado, nada más. No comprueba si, mientras tanto, hay algún cambio en la parte ya descargada del archivo en el servidor. En el peor de los casos, obtienes un archivo dañado que es una mezcla entre el archivo antiguo y el nuevo.También hay otra opción llamada
-nc
para wgetting:Cuando
-nc
se especifica la opción, Wget se negará a descargar copias del mismo archivo. Si tenía el mismo archivo quewget
intenta descargar, se negará a descargarlo a menos que cambie el nombre o elimine el archivo local.A veces, esta opción es muy buena y recomendé usar la
-nc
opción en lugar de ambas-c
u-N
opción porque estas opciones sobrescribirán el archivo de descarga con su archivo local si tenían los mismos nombres.Advertencia (del comentario de jofel)
La
-nc
opción no actualiza el archivo si ha cambiado en el servidor. Si sabe que el archivo cambiará, la-N
opción es preferible. Si sabe que el archivo no cambiará (o no le importa), entonces-nc
está bien.fuente
Sé que se trataba de una pregunta específica sobre wget, pero el OP mencionó "Me alegra usar curl o una alternativa similar con secuencia de comandos si wget no puede hacer esto". No estoy seguro de cuál es el requisito aquí (varios archivos, mantenga la versión anterior si es diferente de la original, reemplácela con la versión recién descargada). Dependiendo de lo que desee y de cómo desee manejar los duplicados, es posible que necesite más que esto. Una forma muy simple de hacer lo que parece querer es simplemente usar curl.
Este comando reemplazará el archivo antiguo con el recién descargado cada vez.
No envíe esto al terminal (sin el "> [nombre de archivo]") si está descargando un archivo binario en lugar de texto. Si lo hace, podría potencialmente meterse con su sesión de terminal. En el caso de que lo haga por accidente, es posible que deba abrir otra sesión de shell / terminal.
fuente