¿Omitir descarga si existen archivos en wget?

Respuestas:

269

Pruebe el siguiente parámetro:

-nc, --no-clobber: omite las descargas que se descargarían en archivos existentes.

Uso de la muestra:

wget -nc http://example.com/pic.png
plundra
fuente
34
-ncno impide el envío de la solicitud HTTP y la posterior descarga del archivo. Simplemente no hace nada después de descargar el archivo si el archivo ya se ha recuperado por completo. ¿Hay alguna forma de evitar hacer la solicitud HTTP si el archivo ya existe? stackoverflow.com/questions/33203898/…
ma11hew28
8
Como se señaló en la pregunta vinculada, no estoy de acuerdo: si no se usa clobber y el nombre de archivo existe, existe. No hay solicitud HEAD incluso. Incluso si este no fuera el caso, verifique si tiene un archivo para comenzar :-)[ ! -e "$(basename $URL)" ] && wget $URL
plundra
3
Creo que puedo estar obteniendo resultados diferentes porque estoy usando la --recursiveopción.
ma11hew28
197

La opción -nc, --no-clobberno es la mejor solución ya que los archivos más nuevos no se descargarán. En su -Nlugar, debe usar el que descargará y sobrescribirá el archivo solo si el servidor tiene una versión más nueva, por lo que la respuesta correcta es:

wget -N http://www.example.com/images/misc/pic.png

Luego, ejecutando Wget con -N, con o sin -ro -p, la decisión de descargar o no una copia más reciente de un archivo depende de la marca de tiempo local y remota y del tamaño del archivo. -ncno puede especificarse al mismo tiempo que -N.

-N, --timestamping: Activa el sellado de tiempo.

Daniel Sokolowski
fuente
39
Cuando el servidor no está configurado correctamente -Npuede fallar y wget siempre se volverá a descargar. Así que a veces -nces mejor solución.
usuario
2
¿Cuál podría ser el escenario aplicable donde ocurriría 'Cuando el servidor no está configurado correctamente'?
AjayKumarBasuthkar
cuando está descargando desde una ubicación que se copió, cambiando todas las marcas de tiempo.
Robert
Si esto es mejor depende del contexto. Por ejemplo, estoy descargando ~ 1600 archivos de una lista y luego actualicé la lista para incluir algunos archivos más. Los archivos no cambian, así que no me importa la última versión y no quiero que compruebe en el servidor las nuevas versiones de los 1600 archivos que ya tengo.
JBentley
2
@AjayKumarBasuthkar: Cuando el servidor no admita ninguna forma de comprobar si hay un archivo más nuevo, wgetse quejará Last-modified header missing; Esta es exactamente la situación descrita.
Piskvor salió del edificio
23

Al ejecutar Wget con -ro -p, pero sin -N, -ndo -nc, volver a descargar un archivo dará como resultado que la nueva copia simplemente sobrescriba la anterior.

Por lo tanto, agregar -ncevitará este comportamiento, en su lugar, se conservará la versión original y se ignorarán las copias más nuevas en el servidor.

Ver más información en GNU.

Mahesh
fuente
18

La respuesta que estaba buscando está en https://unix.stackexchange.com/a/9557/114862 .

El uso de la -cmarca cuando el archivo local es de mayor o igual tamaño que la versión del servidor evitará la descarga.

jsta
fuente
1
Esto es especialmente bueno cuando estás descargando un montón de archivos con el indicador -i. wget -i filelist.txt -creanudará una descarga fallida de una lista de archivos.
Trevor