Utilizzare curl sul Mac per scaricare file (alternativa a wget)
Il comando wget di Linux permette, come sappiamo, di scaricare file da remoto e salvarli sul proprio computer: questa istruzione non è tuttavia presente all’interno dei sistemi operativi Apple, per cui va sostituita con il comando denominato curl.
Sintassi
La sintassi di curl è una delle seguenti:
curl 'url' curl [opzioni] 'url' curl -O 'url' curl -L -O 'url' curl -o inserire.il.nome.file.qui 'url' curl -o guida-sicurezza.pdf 'https://blog.keliweb.it/wp-content/uploads/2013/05/guida-completa-sicurezza-sito.pdf'
dove, in sostanza, come istruzione base andiamo ad associare al comando l’URL da cui scaricare il file pubblico, con eventuali opzioni (-o per scrivere l’output su file, -L per specificare dove salvare in locale, -O per preservare percorso e nome originale del file). Come possiamo vedere da questo ed i successivi esempi, possiamo agire con la massima flessibilità, dato che è possibile cambiare il nome o il path del file, e salvarlo ad esempio con uno a nostra scelta. La cartella di download sarà, se non diversamente specificato, la medesima da cui – da terminale di comando – andremo ad eseguire l’istruzione in questione.
Ricordiamo inoltre che è necessario preventivamente aprire una finestra del terminale del vostro Mac, e digitare il comando che ci serve al suo interno.
Esempi
Download base
Se ad esempio diamo questo comando, andremo a scaricare la FAQ in PDF sulla sicurezza dei vostri siti:
curl -o guida-sicurezza.pdf 'https://blog.keliweb.it/wp-content/uploads/2013/05/guida-completa-sicurezza-sito.pdf'
In tal caso l’output sarà in seguente (salverà in locale nella cartella in cui stiamo lanciando il comando):
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 617k 100 617k 0 0 441k 0 0:00:01 0:00:01 --:--:-- 642k
ovvero informazioni tabellari relative alla percentuale di completamento, percentuale di file ricevuta, ammontare di byte uploadati (Xferd), velocità media, velocità di upload, tempo necessario in totale, tempo trascorso, tempo residuo di scaricamento e velocità istantanea del download.
Download avanzato per pattern di file
È altresì possibile andare ad indicare parte di URL multipli, come nell’esempio seguente:
# scarica file da host1.server.com, host2.server.com, host3.server.com curl -O http://host{1,2,3}.server.com/ # scarica file da server1.com,server2.com,server3.com per i file di nome test.pdf curl -O http://server{1,2,3}.server.com/test.pdf # altro esempio con maschera di file curl -O ftp://intranet.site.{us,uk,in}.lic.net.in/reports/latest[a-z].tar.gz
Scaricare più di un file alla volta
Un altro esempio (rispettivamente per file pdf e png) potrebbe essere, con l’uso di espressioni regolari:
curl -O ftp://ftp.server.com/filenumerato-[1-1000].pdf curl -O ftp://ftp.server.com/images-[001-300].png
il che ci porta ad esempi decisamente più elaborati:
curl -O ftp://ftp.server.com/backups-us-[a-z].tar.gz curl -O http://server1.server.com/music[2003-2013]/archivio[1-20]/backup{a,b,c,d,e,f}.tar.gz
Mostrare una barra di download
Per il download di molti file di grosse dimensioni, possiamo decidere di mostrare una barra di caricamento con il parametro -#:
curl -# -O http://www.server.com/files/documento-abc.pdf
che mostrerà qualcosa del genere nel terminale:
######################################################################## 100.0%
Scaricare da un server con redirect 301 / con parametri
Nel caso in cui il server da cui stiamo scaricando preveda redirect 301, parametri via URL e simili, possiamo utilizzare l’opzione -L come esemplificato di seguito:
curl -L -o 'filezilla.tar.bz2' 'http://downloads.sourceforge.net/project/filezilla/FileZilla_Client/3.7.3/FileZilla_3.7.3_i686-apple-darwin9.app.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2F&ts=1381651492&use_mirror=ncu'
il quale salva FileZilla in locale come filezilla.tar.bz2 dall’URL “non convenzionale” indicato.
Un output di esempio (seguito dal comando ls che serve a mostrare come il file sia effettivamente stato scaricato in locale) potrebbe essere il seguente:
SC-Macbook:~ utente34$ curl -L -o 'filezilla.tar.bz2' 'http://downloads.sourceforge.net/project/filezilla/FileZilla_Client/3.7.3/FileZilla_3.7.3_i686-apple-darwin9.app.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2F&ts=1381651492&use_mirror=ncu' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 5512k 100 5512k 0 0 645k 0 0:00:08 0:00:08 --:--:-- 809k SC-Macbook:~ utente34$ ls Applications Library filezilla.tar.bz2 Desktop Movies guida-sicurezza.pdf Documents Music log Downloads Pictures portprofile.log Dropbox Public Google Drive Sites
Scaricare più rapidamente
Per scaricare un file in modalità compressa per risparmiare banda, ammesso che il server lo supporti, potete ricorrere a:
curl -L -O --compressed 'http://host.server.com/file-molto-grosso.html'
Scaricare con username / password
Infine se il server richiedesse delle credenziali di accesso, potete ricorrere ad una prima modalità (insicura, sconsigliata) ed una seconda più solida dal punto di vista della sicurezza. In entrambi i casi dovrete conoscere username e password per accedere al sistema.
# Esempi con connessione in chiaro SCONSIGLIATI! curl ftp://username:password@ftp.server.com:21/path/al/file.tar.gz curl http://username:password@ftp.server.com/path/al/file.tar.gz # Esempi con connessione protetta SSL / STP - CONSIGLIATI curl --ftp-ssl -u username:password ftp://ftp.server.com:21/path/al/file.tar.gz curl -u username sftp://ftp.server.com:21/path/al/file.tar.gz
Ovviamente il presupposto per l’uso di queste istruzioni è quello di conoscere il path dei file sul server destinazione.