[SOLVED] Wget con file multipli

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
Linpassion
Linux 2.x
Linux 2.x
Messaggi: 336
Iscritto il: mar 30 ott 2012, 11:17
Slackware: 14.2
Desktop: xfce, fluxbox

[SOLVED] Wget con file multipli

Messaggio 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
Ultima modifica di Linpassion il sab 7 apr 2018, 9:58, modificato 2 volte in totale.

albatrosla
Packager
Packager
Messaggi: 1339
Iscritto il: sab 27 mar 2004, 0:00
Slackware: current
Desktop: fluxbox.git
Località: Collegno, but made in Friûl
Contatta:

Re: Wget con file multipli

Messaggio 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/"

Avatar utente
Linpassion
Linux 2.x
Linux 2.x
Messaggi: 336
Iscritto il: mar 30 ott 2012, 11:17
Slackware: 14.2
Desktop: xfce, fluxbox

Re: Wget con file multipli

Messaggio da Linpassion »

Funziona ottimamente

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: [SOLVED] Wget con file multipli

Messaggio 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

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: [SOLVED] Wget con file multipli

Messaggio 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

albatrosla
Packager
Packager
Messaggi: 1339
Iscritto il: sab 27 mar 2004, 0:00
Slackware: current
Desktop: fluxbox.git
Località: Collegno, but made in Friûl
Contatta:

Re: [SOLVED] Wget con file multipli

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

Rispondi