[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.
Avatar utente
Linpassion
Linux 2.x
Linux 2.x
Messaggi: 201
Iscritto il: mar ott 30, 2012 11:17
Slackware: 14.0
Kernel: 3.2.9-smp
Desktop: fluxbox

[SOLVED] Wget con file multipli

Messaggioda Linpassion » ven apr 06, 2018 11:53

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 apr 07, 2018 9:58, modificato 2 volte in totale.

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

Re: Wget con file multipli

Messaggioda albatrosla » ven apr 06, 2018 17:09

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: 201
Iscritto il: mar ott 30, 2012 11:17
Slackware: 14.0
Kernel: 3.2.9-smp
Desktop: fluxbox

Re: Wget con file multipli

Messaggioda Linpassion » sab apr 07, 2018 9:57

Funziona ottimamente

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 2916
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: [SOLVED] Wget con file multipli

Messaggioda joe » sab apr 07, 2018 17:00

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: 2916
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: [SOLVED] Wget con file multipli

Messaggioda joe » sab apr 07, 2018 17:52

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: 1329
Iscritto il: sab mar 27, 2004 0:00
Slackware: current
Desktop: fluxbox.git
Località: Collegno, but made in Friûl
Contatta:

Re: [SOLVED] Wget con file multipli

Messaggioda albatrosla » mar apr 10, 2018 15:24

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