Come posso limitare la dimensione del file scaricato in wget?


13

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:


14

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.


6
È possibile combinare questo con un limite del sistema di vietare ricciolo dalla creazione di un file più grande di $nbyte: (ulimit -f $(($n/512)); curl --max-filesize $n …). curlsi interromperà con un errore se la dimensione del file supera i $n/512blocchi da 512 byte.
Gilles 'SO- smetti di essere malvagio' il

Puoi anche httrack.
Vi.

6

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'è $URLl'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).


1

Non sembra esserci alcun modo ragionevole per impostare una dimensione massima del file con wget.


2
Anche l'approccio di Gilles con ulimit(vedi bash(1), setrlimit(2)) funzionerà wget(1), anche se è un po 'pesante.
sarnold,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.