Utilizzo di wget per recuperare ricorsivamente una directory con file arbitrari al suo interno
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?
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:
- Aggiungi a
~ / .bashrc
o incolla nel terminale -
wgetod " http: //example.com/x/"