Utilizzo di wget per recuperare ricorsivamente una directory con file arbitrari al suo interno

StackOverflow https://stackoverflow.com/questions/273743

  •  07-07-2019
  •  | 
  •  

Domanda

Ho una directory web in cui memorizzo alcuni file di configurazione. Vorrei usare wget per rimuovere quei file e mantenerne la struttura attuale. Ad esempio, la directory remota è simile a:

http://mysite.com/configs/.vim/

.vim contiene più file e directory. Voglio replicarlo sul client usando wget. Non riesco a trovare la giusta combinazione di flag wget per farlo. Qualche idea?

È stato utile?

Soluzione

Devi passare l'opzione -np / --no-parent a wget (oltre a -r / --recursive , ovviamente), altrimenti seguirà il link nell'indice della directory sul mio sito alla directory principale. Quindi il comando sarebbe simile al seguente:

wget --recursive --no-parent http://example.com/configs/.vim/

Per evitare di scaricare i file index.html generati automaticamente, utilizzare l'opzione -R / --reject :

wget -r -np -R "index.html*" http://example.com/configs/.vim/

Altri suggerimenti

Per scaricare una directory in modo ricorsivo, che rifiuta i file index.html * e i download senza il nome host, la directory principale e l'intera struttura della directory:

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data

Per chiunque abbia problemi simili. Wget segue robots.txt che potrebbe non permetterti di accedere al sito. Non preoccuparti, puoi disattivarlo:

wget -e robots=off http://www.example.com/

http://www.gnu.org/software/wget/manual/html_node /Robot-Exclusion.html

Dovresti usare il flag -m (mirror), in quanto si occupa di non confondere con i timestamp e di ricorrere indefinitamente.

wget -m http://example.com/configs/.vim/

Se aggiungi i punti menzionati da altri in questa discussione, sarebbe:

wget -m -e robots=off --no-parent http://example.com/configs/.vim/

Ecco il comando wget completo che ha funzionato per me per scaricare i file dalla directory di un server (ignorando robots.txt ):

wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/

Se --no-parent non aiuta, potresti usare l'opzione --include .

Directory struct:

http://<host>/downloads/good
http://<host>/downloads/bad

E vuoi scaricare download / good ma non download / bad :

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good
wget -r http://mysite.com/configs/.vim/

funziona per me.

Forse hai un .wgetrc che interferisce con esso?

Per recuperare una directory in modo ricorsivo con nome utente e password, utilizzare il comando seguente:

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/

Tutto ciò che serve sono due flag, uno è " -r " per la ricorsione e " - no-parent " (o -np ) per non entrare in '.' e " .. " . In questo modo:

wget -r --no-parent http://example.com/configs/.vim/

Questo è tutto. Verrà scaricato nel seguente albero locale: ./example.com/configs/.vim . Tuttavia, se non vuoi le prime due directory, usa il flag aggiuntivo --cut-dirs = 2 come suggerito nelle risposte precedenti:

wget -r --no-parent --cut-dirs = 2 http://example.com/configs/.vim/

E scaricherà il tuo albero dei file solo in ./.vim/

In effetti, ho ottenuto la prima riga da questa risposta proprio dal wget manual , hanno un esempio molto chiaro verso la fine della sezione 4.3.

Dovresti essere in grado di farlo semplicemente aggiungendo un -r

wget -r http://stackoverflow.com/

Wget 1.18 potrebbe funzionare meglio, ad esempio, sono stato morso da un bug della versione 1.12 in cui ...

wget --recursive (...)

... recupera solo index.html invece di tutti i file.

La soluzione alternativa consisteva nel notare reindirizzamenti 301 e provare la nuova posizione & # 8212; dato il nuovo URL, wget ha ottenuto tutti i file nella directory.

Questa versione viene scaricata in modo ricorsivo e non crea directory principali.

wgetod() {
    NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o / | wc -l)"
    NCUT=$((NSLASH > 0 ? NSLASH-1 : 0))
    wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1"
}

Utilizzo:

  1. Aggiungi a ~ / .bashrc o incolla nel terminale
  2. wgetod " http: //example.com/x/"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top