Pagina 1 di 1
[SOLVED] Wget con file multipli
Inviato: ven 6 apr 2018, 11:53
da Linpassion
Avrei una domanda: è possibile utilizzare wget per scaricare un gruppo di file da un url, come ad esempio tutti i file *txz da
http://slackware.uk/csb/14.2/x86/ ?
Grazie
Re: Wget con file multipli
Inviato: ven 6 apr 2018, 17:09
da albatrosla
Linpassion ha scritto:Avrei una domanda: è possibile utilizzare wget per scaricare un gruppo di file da un url, come ad esempio tutti i file *txz da
http://slackware.uk/csb/14.2/x86/ ?
Non ho mai provato, ma questo potrebbe funzionare:
Codice: Seleziona tutto
wget -r --accept "*.txz" --level 2 "http://slackware.uk/csb/14.2/x86/"
Re: Wget con file multipli
Inviato: sab 7 apr 2018, 9:57
da Linpassion
Funziona ottimamente
Re: [SOLVED] Wget con file multipli
Inviato: sab 7 apr 2018, 17:00
da joe
Però ti scarica anche il pattern delle directories superiori che probabilmente non ti servono.
Codice: Seleziona tutto
$ tree
.
└── slackware.uk
├── csb
│ └── 14.2
│ └── x86
│ ├── BeautifulSoup-4.6.0-i586-1_csb.txz
│ ├── accountsservice-0.6.45-i586-1_csb.txz
│ ├── alacarte-3.11.91-i586-1_csb.txz
│ ├── autoconf-archive-2017.03.21-i586-1_csb.txz
│ ├── caribou-0.4.21-i586-1_csb.txz
│ └── cinnamon-3.4.6-i586-1_csb.txz
└── robots.txt.tmp
4 directories, 7 files
L'ho interrotto al volo... con ctrl+c...
Avevo buttato giù una cosa del genere anni fà. Nel mio caso scarica la sotto-directory e tutto il contenuto tranne gli index.html*:
Codice: Seleziona tutto
cat scripts/webdir-get
#!/bin/sh
# =========================
# caso 1.
# http://dominio/a/b/c/
#
# caso 2.
# dominio/a/b/c/
#
# 0- lo script scarica nella dir corrente la dir "c" e i dati e le sottodir in essa contenute.
#
# otterremo nel dir corrente: c/dati
#
# . Bisogna sapere quante dir superiori bisogna eliminare:
#
# 1- eliminiamo se presente l'"http://" iniziale e l'eventuale slah finale.
# otteniamo:
#
# dominio/a/b/c
#
# 2- a questo punto contiamo gli slash: N (nell'esempio avremo "3").
# 3- escludo N-1 directory (più il dominio). Nel mio caso avrò 3-1=2 dir da eliminare
# infatti da "dominio/a/b/c" verrà eliminato "dominio/a/b" e otterrò nella dir
# corrente "c" come voluto.
# =================================
#
# - valuto se c'è http:// all'inizio e alla fine
# - se c'è lo tolgo
URL="$(echo "$1" |sed 's/^http\:\/\///'|sed 's/\/$//')"
echo URL: $URL
# quanti slash ci sono?
SLASHES=$(grep -o \/ <<< "$URL" | wc -l)
echo Slashes: $SLASHES
DIRSTOCUT=$(($SLASHES-1))
echo DIRSTOCUT: $DIRSTOCUT
wget -e robots=off -r -nH --cut-dirs="$DIRSTOCUT" --no-parent --reject="index.html*" "$URL/"
I commenti spiegano cosa fa lo script. Sicuramente c'è un modo più semplice...
Testalo perchè non ricordo se funzionava, mi pare di sì ma è tanto che non lo uso.
Puoi adattarlo al tuo caso sostituendo "reject=..." con --accept "*.txz" come ha suggerito "albatrosla":
Codice: Seleziona tutto
wget -e robots=off -r -nH --cut-dirs="$DIRSTOCUT" --no-parent --accept="*.txz" "$URL/"
Venendo all'esempio tu lanceresti:
E otterresti una cosa di sto tipo:
Codice: Seleziona tutto
$ tree
.
└── x86
├── BeautifulSoup-4.6.0-i586-1_csb.txz
├── accountsservice-0.6.45-i586-1_csb.txz
├── alacarte-3.11.91-i586-1_csb.txz
├── autoconf-archive-2017.03.21-i586-1_csb.txz
├── caribou-0.4.21-i586-1_csb.txz
├── cinnamon-3.4.6-i586-1_csb.txz
└── cinnamon-control-center-3.4.0-i586-1_csb.txz
Re: [SOLVED] Wget con file multipli
Inviato: sab 7 apr 2018, 17:52
da joe
Quello che invece volevo fare io si poteva più facilmente ottenere con "lftp" prendendo spunto da questa pagina di Alien Bob:
http://www.slackware.com/~alien/slackbuilds/
Codice: Seleziona tutto
lftp -c "open http://www.slackware.com/~alien/slackbuilds/<program>/; mirror build"
In questo modo scarichi tutta la sottodir "build" coi files che contiene. Nel tuo caso non va bene però perchè vuoi solo i txz, questo invece prende tutto.
lftp ha l'opzione "--exclude", ma a te servirebbe una "--include-only=REGEX".
Ne parlano qui:
https://stackoverflow.com/questions/209 ... -file-path
Ma alla fine sembra venire fuori qualcosa di un po' troppo complicato. Quasi come il mio script!
Altrimenti se volessi prendere solo i txz e ritrovarteli nella directory corrente, potresti usare il comando di albatrosla in uno script che dopo il download
sposta i txz nella dir corrente e cancella l'albero delle subdir vuote...
qualcosa tipo:
Codice: Seleziona tutto
url=$1
tree=$(echo $url|sed 's/^....\:\/\///')
subdir=$(echo $tree|sed 's/\/.*$//')
wget -r --accept "*.txz" --level 2 "*$url"
mv $tree/*txz .
rm -r $subdir
Bisognerebbe però impedire che disgraziatamente il "rm" non rimuova qualcosa di già esistente e omonimo nella di corrente, caso difficile ma non impossibile...
Insomma prendi tutto come spunti da verificare.
Ciao
Re: [SOLVED] Wget con file multipli
Inviato: mar 10 apr 2018, 15:24
da albatrosla
Per soluzioni arzigogolate, io usavo links -dump per salvarmi la pagina html, poi facevo un parsing di quest'ultima per prendermi ciò che mi interessava e infine davo la lista di url in pasto ad un ciclo con wget.
In pratica facevo in batch ciò che avrei fatto manualmente via browser...