Wget

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

wget is een Unix command line-routine om bestanden te downloaden over http of ftp. Erg handig in het automatiseren van processen, of het leegtrekken of migreren van een website. Het is het broertje van cURL.

Eén bestand downloaden via http

Gewoon

wget https://downloads.wordpress.org/plugin/akismet.3.1.3.zip

Naar een specifiek output-bestand

wget http://downloads.wordpress.org/plugin/w3-total-cache.zip -O ~/in3/w3-total-cache.zip

Wat niet werkt:

wget http://downloads.wordpress.org/plugin/w3-total-cache.zip ~/in3/w3-total-cache.zip # Laatste argument wordt genegeerd
wget http://downloads.wordpress.org/plugin/w3-total-cache.zip -O ~/in3 # Foutmelding: Laatste argument moet inclusief bestandsnaam zijn

Details:

  • -o (zonder hoofdletter) heeft betrekking op het schrijven naar een logbestand
  • -O (met hoofdletter) is blijkbaar een gebruikelijke schakelaar om de output te specificeren: curl gebruikt dezelfde schakelaar

Map met bestanden downloaden - Kan niet - En terecht

Wil maar niet lukken. Het beste tot op heden bron:

wget --recursive --no-parent --reject "index.html" -e robots=off -nH -r http://media.example.com/mijn_map/

Waarom dat vermoedelijk niet gaat: Als deze bestanden niet naar elkaar verwijzen, kan wget nooit weten welke bestanden dit zijn. Komt bij dat Apache niet zomaar de inhoud van een map toont.

Ander voorbeeld:

  • Een plugin staat op media.example.com/my_plugin. Deze plugin bevat geen index.html-bestand, maar wel 50 andere bestanden, in 30 mappen
  • Deze map kun je dus niet downloaden
  • Oplossing: Gebruik een archiefbestand met daarin deze plugin

Hele site downloaden via http

wget -r -l 25 http://www.example.com

In dit geval recursief met een recursie-level van 25.

Hele site downloaden via ftp

Bv. (met een recursie-level van 25):

wget -r -l 25 ftp://username:password@ip.of.old.host

Escape codes

Door de onderdelen van het commando apart te benoemen en met ' te werken, kun je bv. uitroeptekens, spaties en apestaartjes escapen:

wget -q -T 60 --retry-connrefused -t 5 --waitretry=60 --user='ftp2.company.com|company2013' 
--password='!company2013' -N -P "data/parser/company/" "ftp://ftp2.company.com/Production/somedata.zip"

Spanning hosts

http://www.gnu.org/software/wget/manual/html_node/Spanning-Hosts.html

Script downloadsite.sh

#!/bin/sh

#########################################
# Haal via wget (FTP) een site hierheen!
#########################################
#
# Inloggegevens bron-FTP-account
#
inlognaam="inlognaam"
wachtwoord="wachtwoord"
bron="ftp://example.com"

#
# Kopiëer alles naar een 'in'-map
#
doel="/home/account/in3"

#
# -r - Recursie
# -c - Continue   Handig als je verder wilt gaan met een eerdere download
# -l - Level      Level of recursie. Standaard is 5, en dat is te weinig!
#
cd $doel

wget -r -c -l 25 --user=$inlognaam --password=$wachtwoord $bron

Voorbeeld: Mediawiki downloaden

De working directory is de doellocatie van de MediaWiki-installatie. Vandaaruit (bron):

wget http://releases.wikimedia.org/mediawiki/1.24/mediawiki-1.24.2.tar.gz

Error 420: Too Many Requests

Deze foutmelding geeft aan dat de server vindt dat je te veel vraagt. Oplossing: Commando herhaaldelijk geven, maar alleen nieuwe bestanden opslaan. Bv.:

wget -r -c http://www.example.com

Zie ook

Bronnen