Voglio usare wget
(da uno script php) per scaricare file di immagini, ma non voglio scaricare file di una certa dimensione.
Posso limitare la dimensione del file con wget
? In caso contrario, qual è il modo migliore?
Voglio usare wget
(da uno script php) per scaricare file di immagini, ma non voglio scaricare file di una certa dimensione.
Posso limitare la dimensione del file con wget
? In caso contrario, qual è il modo migliore?
Risposte:
Se stai eseguendo il download di script, dovresti prendere in considerazione l'utilizzo curl
. Wget può analizzare l'output e recuperare ricorsivamente interi siti, ma curl ha molte più opzioni relative al download effettivo di un file specifico. Ecco l'opzione pertinente nella pagina man:
--max-filesize
Specifica la dimensione massima (in byte) di un file da scaricare. Se il file richiesto è maggiore di questo valore, il trasferimento non verrà avviato e l'arricciatura tornerà con il codice di uscita 63.
NOTA: la dimensione del file non è sempre nota prima del download e per tali file questa opzione non ha alcun effetto anche se il file il trasferimento finisce per essere maggiore di questo dato limite.
Vale la pena prendere nota della nota che funziona solo con alcuni file. Il client dipende dal server per segnalare la dimensione del file prima che inizi il download. La maggior parte, ma certamente non tutti i server lo segnalano.
Se vuoi usare wget, ecco un modo per testare la dimensione del file senza scaricare:
wget --spider $URL 2>&1 | awk '/Length/ {print $2}'
dov'è $URL
l'URL del file che vuoi scaricare, ovviamente.
Quindi puoi condizionare il tuo script in base all'output. ad esempio:
{ [ $(wget --spider $URL 2>&1 | awk '/Length/ {print $2}') -lt 20971520 ] && wget $URL; } || echo file to big
per limitare la dimensione del download a 20 MB.
(il codice è brutto, solo a scopo informativo).
Non sembra esserci alcun modo ragionevole per impostare una dimensione massima del file con wget.
ulimit
(vedi bash(1)
, setrlimit(2)
) funzionerà wget(1)
, anche se è un po 'pesante.
wget ha -Q
--quota
un'opzione che limita la quantità massima di download quando vengono forniti più URL (elenco ricorsivo o di input).
https://www.gnu.org/software/wget/manual/html_node/Download-Options.html
$n
byte:(ulimit -f $(($n/512)); curl --max-filesize $n …)
.curl
si interromperà con un errore se la dimensione del file supera i$n/512
blocchi da 512 byte.