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:

Codice: Seleziona tutto

webdir-get "http://slackware.uk/csb/14.2/x86/"
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! :D

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...