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?
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?
Respuestas:
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.
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).
No parece haber una forma razonable de establecer un tamaño máximo de archivo con wget.
ulimit
(véase bash(1)
, setrlimit(2)
) también trabajará con wget(1)
, aunque es un poco de mano dura.
wget tiene una -Q
--quota
opción que limita la cantidad máxima de descarga cuando se proporcionan varias URLS (lista recursiva o de entrada).
https://www.gnu.org/software/wget/manual/html_node/Download-Options.html
$n
bytes:(ulimit -f $(($n/512)); curl --max-filesize $n …)
.curl
abortará con un error si el tamaño del archivo supera$n/512
los bloques de 512 bytes.