Comment puis-je limiter la taille des fichiers téléchargés dans wget?

13

Je veux utiliser wget(à partir d'un script php) pour télécharger des fichiers image, mais je ne veux pas télécharger des fichiers d'une certaine taille.

Puis-je limiter la taille des fichiers avec wget? Sinon, quelle est la meilleure façon?

T. Brian Jones
la source

Réponses:

14

Si vous effectuez des scripts de téléchargement, vous devriez envisager d'utiliser curlplutôt. Wget peut analyser la sortie et récupérer récursivement des sites entiers, mais curl a beaucoup plus d'options concernant le téléchargement réel d'un fichier spécifique. Voici l'option pertinente dans la page de manuel:

--max-filesize
Spécifiez la taille maximale (en octets) d'un fichier à télécharger. Si le fichier demandé est plus grand que cette valeur, le transfert ne démarrera pas et curl reviendra avec le code de sortie 63.
REMARQUE: la taille du fichier n'est pas toujours connue avant le téléchargement, et pour de tels fichiers, cette option n'a aucun effet même si le fichier le transfert finit par être supérieur à cette limite donnée.

La remarque à ce sujet ne fonctionne que pour certains fichiers mérite d'être considérée. Le client dépend du serveur pour signaler la taille du fichier avant de commencer le téléchargement. La plupart des serveurs, mais certainement pas tous, le signalent.

Caleb
la source
6
Vous pouvez combiner cela avec une limite du système d'interdire boucle de créer un fichier plus grand que $noctets: (ulimit -f $(($n/512)); curl --max-filesize $n …). curls'interrompra avec une erreur si la taille du fichier dépasse les $n/512blocs de 512 octets.
Gilles 'SO- arrête d'être méchant'
Vous pouvez également vous httrack.
Vi.
6

Si vous souhaitez utiliser wget, voici un moyen de tester la taille du fichier sans téléchargement:

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

$URLest l'URL du fichier que vous souhaitez télécharger, bien sûr.

Vous pouvez donc conditionner votre script en fonction de la sortie. tel que:

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

pour limiter la taille du téléchargement à 20 Mo.

(le code est moche, à titre informatif uniquement).

Philomath
la source
1

Il ne semble pas y avoir de moyen raisonnable de définir une taille de fichier maximale avec wget.

T. Brian Jones
la source
2
L'approche de Gilles avec ulimit(voir bash(1), setrlimit(2)) travaillera également avec wget(1), mais il est un peu lourde.
sarnold