Wget: verschil tussen versies
(12 tussenliggende versies door dezelfde gebruiker niet weergegeven) | |||
Regel 3: | Regel 3: | ||
== Eén bestand downloaden via http == | == Eén bestand downloaden via http == | ||
− | '' | + | <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 == | ||
− | + | 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 bestand === | |
− | + | 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 | ||
− | + | === 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> | ||
− | + | Hierbij wordt het bestand ''keys.asc'' gebruikt als argument voor <code>sudo apt-key add</code>. | |
− | |||
− | == Map met bestanden downloaden == | + | == Map met bestanden downloaden - Kan meestal niet == |
− | + | 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 | ||
− | + | * <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 == | ||
− | + | 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 11: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
- https://www.gnu.org/software/wget/
- http://stackoverflow.com/questions/18120626/escaping-in-wget-bash-command
- http://www.editcorp.com/personal/lars_appel/wget/v1/wget_7.html
- 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