¿Cómo puedo limitar el tamaño del archivo descargado en wget?

13

Quiero usar wget(desde un script php) para descargar archivos de imagen, pero no quiero descargar archivos de un tamaño determinado.

¿Puedo limitar el tamaño del archivo con wget? Si no, ¿cuál es una mejor manera?

T. Brian Jones
fuente

Respuestas:

14

Si está descargando secuencias de comandos, debe considerar usar curl usarlas. Wget puede analizar la salida y buscar sitios enteros de forma recursiva, pero curl tiene muchas más opciones relacionadas con la descarga real de un archivo específico. Aquí está la opción relevante en la página del manual:

--Tamaño máximo de archivo
Especifica el tamaño máximo (en bytes) de un archivo para descargar. Si el archivo solicitado es mayor que este valor, la transferencia no se iniciará y el rizo volverá con el código de salida 63.
NOTA: El tamaño del archivo no siempre se conoce antes de la descarga, y para dichos archivos esta opción no tiene efecto incluso si el archivo la transferencia termina siendo mayor que este límite dado.

Vale la pena considerar la nota acerca de que esto solo funciona para algunos archivos. El cliente depende del servidor para informar qué tan grande será el archivo antes de que comience la descarga. La mayoría, pero ciertamente no todos los servidores informan esto.

Caleb
fuente
66
Esto se puede combinar con un límite del sistema para prohibir rizo de la creación de un archivo de más de $nbytes: (ulimit -f $(($n/512)); curl --max-filesize $n …). curlabortará con un error si el tamaño del archivo supera $n/512los bloques de 512 bytes.
Gilles 'SO- deja de ser malvado'
También puedes httrack.
Vi.
6

Si desea usar wget, aquí hay una forma de probar el tamaño del archivo sin descargarlo:

wget --spider $URL 2>&1 | awk '/Length/ {print $2}'

dónde $URL está la URL del archivo que desea descargar, por supuesto.

Para que pueda condicionar su secuencia de comandos en función de la salida. como:

{ [ $(wget --spider $URL 2>&1 | awk '/Length/ {print $2}') -lt 20971520 ] && wget $URL; } || echo file to big

para limitar el tamaño de descarga a 20 MB.

(el código es feo, solo con fines informativos).

Philomath
fuente
1

No parece haber una forma razonable de establecer un tamaño máximo de archivo con wget.

T. Brian Jones
fuente
2
El enfoque de Gilles con ulimit(véase bash(1), setrlimit(2)) también trabajará con wget(1), aunque es un poco de mano dura.
sarnold