Wget: verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(13 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 1: Regel 1:
''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.
+
''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 ==
 
== Eén bestand downloaden via http ==
  
''' Gewoon '''
+
<pre>
 +
wget https://downloads.wordpress.org/plugin/akismet.3.1.3.zip
 +
</pre>
 +
 
 +
Het bestand belandt in de ''CWD - current working directory'' onder dezelfde naam als op de bronlocatie.
 +
 
 +
== Output-specificatie ==
  
wget https://downloads.wordpress.org/plugin/akismet.3.1.3.zip
+
De optie <code>-O</code> (hoofdletter) of <code>--output-document = file</code> zorgt dat de output niet naar de betreffende bestanden wordt geschreven, maar wordt samengevoegd (concatenated), en naar een bestemming naar keuze wordt geleid.
  
''' Naar een specifiek output-bestand '''
+
=== Naar bestand ===
  
wget http://downloads.wordpress.org/plugin/w3-total-cache.zip -O ~/in3/w3-total-cache.zip
+
Voorbeeld:
 +
 
 +
<pre>
 +
wget http://downloads.wordpress.org/plugin/w3-total-cache.zip -O ~/in3/w3-total-cache.zip
 +
</pre>
  
 
Wat niet werkt:
 
Wat niet werkt:
Regel 17: Regel 27:
 
  wget http://downloads.wordpress.org/plugin/w3-total-cache.zip -O ~/in3 # Foutmelding: Laatste argument moet inclusief bestandsnaam zijn
 
  wget http://downloads.wordpress.org/plugin/w3-total-cache.zip -O ~/in3 # Foutmelding: Laatste argument moet inclusief bestandsnaam zijn
  
Details:
+
=== Naar standaard-output ===
 +
 
 +
Door het argument <code>-</code> mee te geven met <code>-O</code>, wordt de output naar ''standard output'' gestuurd, waarbij link-conversie gedeactiveerd wordt (om te schrijven naar een bestand genaamd <code>-</code>, gebruik argument <code>./-</code>). Dit is handig voor ''piping''.
 +
 
 +
Voorbeeld:
 +
 
 +
<pre>
 +
wget -O- https://updates.signal.org/desktop/apt/keys.asc | sudo apt-key add -
 +
</pre>
  
* -o (zonder hoofdletter) heeft betrekking op het schrijven naar een logbestand
+
Hierbij wordt het bestand ''keys.asc'' gebruikt als argument voor <code>sudo apt-key add</code>.
* -O (met hoofdletter) is blijkbaar een gebruikelijke schakelaar om de output te specificeren: <code>curl</code> gebruikt dezelfde schakelaar
 
  
== Map met bestanden downloaden ==
+
== Map met bestanden downloaden - Kan meestal niet ==
  
Wil maar niet lukken. Het beste tot op heden [https://stackoverflow.com/questions/273743/using-wget-to-recursively-fetch-a-directory-with-arbitrary-files-in-it bron]:
+
Ik heb ooit geprobeerd om recursief een map-met-inhoud te downloaden met zoiets als dit [https://stackoverflow.com/questions/273743/using-wget-to-recursively-fetch-a-directory-with-arbitrary-files-in-it bron]:
  
 
  wget --recursive --no-parent --reject "index.html" -e robots=off -nH -r http://media.example.com/mijn_map/
 
  wget --recursive --no-parent --reject "index.html" -e robots=off -nH -r http://media.example.com/mijn_map/
  
 +
Dat werkt echter niet, vermoedelijk om een simpele reden: Een webserver vertelt doorgaans niet welke bestanden er in een map staan.
 +
 +
Dit kan wél werken als er een index.html-bestand in de map staat, dat links bevat naar alle andere bestanden.
 +
 +
Ander voorbeeld:
 +
 +
* Een plugin staat op een eigen webserver in map media.example.com/my_plugin. Deze plugin bestaat uit 30 mappen met in totaal 50 bestanden. Er is geen index.html-bestandin 30 mappen
 +
* Deze map kun je dus ''niet'' downloaden
 +
* Oplossing: Stop deze mappen met inhoud in een archiefbestand.
  
 
== Hele site downloaden via http ==
 
== Hele site downloaden via http ==
Regel 33: Regel 59:
 
  wget -r -l 25 http://www.example.com
 
  wget -r -l 25 http://www.example.com
  
In dit geval ''recursief'' met een ''recursie-level'' van 25.
+
* <code>-r</code>: Recursie
 +
* <code>-l</code>: Met een ''recursie-level'' van 25.
  
 
== Hele site downloaden via ftp ==
 
== Hele site downloaden via ftp ==
Regel 43: Regel 70:
 
== Escape codes ==
 
== Escape codes ==
  
Door de onderdelen van het commando apart te benoemen en met ' te werken, kun je bv. uitroeptekens, spaties en apestaartjes ''escapen'':
+
Onder andere spaties, uitroeptekens en apestaartjes moeten ''ge-escaped'' worden. In mijn ervaring levert dat vaak ondoorgrondelijke syntaxis op. Om dat beheersbaar te houden:
 +
 
 +
* Benoem de verschillende argumenten van het commando apart
 +
* Escape met behulp van apostropjes - "'"
 +
* Breng argumenten onder in aparte variabelen. Zie het script verderop in dit artikel ter illustratie.
 +
 
 +
Voorbeeld:
  
 
<pre>
 
<pre>
Regel 95: Regel 128:
  
 
  wget -r -c http://www.example.com
 
  wget -r -c http://www.example.com
 +
 +
=== Alleen afbeeldingen downloaden ===
 +
 +
Bv. [https://stackoverflow.com/questions/4602153/how-do-i-use-wget-to-download-all-images-into-a-single-folder-from-a-url]:
 +
 +
<pre>
 +
wget -nd -r -l 25 -A jpeg,jpg,bmp,gif,png https://example.com
 +
</pre>
 +
 +
== Zie ook ==
 +
 +
* [[CURL]]
 +
* [[Archiefbestanden]]
  
 
== Bronnen ==
 
== Bronnen ==
Regel 102: Regel 148:
 
* http://www.editcorp.com/personal/lars_appel/wget/v1/wget_7.html
 
* http://www.editcorp.com/personal/lars_appel/wget/v1/wget_7.html
 
* https://www.gnu.org/software/wget/manual/wget.html - Complete handleiding
 
* https://www.gnu.org/software/wget/manual/wget.html - Complete handleiding
 +
* https://stackoverflow.com/questions/4602153/how-do-i-use-wget-to-download-all-images-into-a-single-folder-from-a-url

Huidige versie van 27 jan 2021 om 12:12

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

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

Het bestand belandt in de CWD - current working directory onder dezelfde naam als op de bronlocatie.

Output-specificatie

De optie -O (hoofdletter) of --output-document = file zorgt dat de output niet naar de betreffende bestanden wordt geschreven, maar wordt samengevoegd (concatenated), en naar een bestemming naar keuze wordt geleid.

Naar bestand

Voorbeeld:

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

Naar standaard-output

Door het argument - mee te geven met -O, wordt de output naar standard output gestuurd, waarbij link-conversie gedeactiveerd wordt (om te schrijven naar een bestand genaamd -, gebruik argument ./-). Dit is handig voor piping.

Voorbeeld:

wget -O- https://updates.signal.org/desktop/apt/keys.asc | sudo apt-key add -

Hierbij wordt het bestand keys.asc gebruikt als argument voor sudo apt-key add.

Map met bestanden downloaden - Kan meestal niet

Ik heb ooit geprobeerd om recursief een map-met-inhoud te downloaden met zoiets als dit bron:

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

Dat werkt echter niet, vermoedelijk om een simpele reden: Een webserver vertelt doorgaans niet welke bestanden er in een map staan.

Dit kan wél werken als er een index.html-bestand in de map staat, dat links bevat naar alle andere bestanden.

Ander voorbeeld:

  • Een plugin staat op een eigen webserver in map media.example.com/my_plugin. Deze plugin bestaat uit 30 mappen met in totaal 50 bestanden. Er is geen index.html-bestandin 30 mappen
  • Deze map kun je dus niet downloaden
  • Oplossing: Stop deze mappen met inhoud in een archiefbestand.

Hele site downloaden via http

wget -r -l 25 http://www.example.com
  • -r: Recursie
  • -l: 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

Onder andere spaties, uitroeptekens en apestaartjes moeten ge-escaped worden. In mijn ervaring levert dat vaak ondoorgrondelijke syntaxis op. Om dat beheersbaar te houden:

  • Benoem de verschillende argumenten van het commando apart
  • Escape met behulp van apostropjes - "'"
  • Breng argumenten onder in aparte variabelen. Zie het script verderop in dit artikel ter illustratie.

Voorbeeld:

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

Alleen afbeeldingen downloaden

Bv. [1]:

wget -nd -r -l 25 -A jpeg,jpg,bmp,gif,png https://example.com

Zie ook

Bronnen