J'ai un répertoire Web où je stocke des fichiers de configuration. J'aimerais utiliser wget pour extraire ces fichiers et conserver leur structure actuelle. Par exemple, le répertoire distant ressemble à:
http://mysite.com/configs/.vim/
.vim contient plusieurs fichiers et répertoires. Je veux reproduire cela sur le client en utilisant wget. Je n'arrive pas à trouver le bon combo de drapeaux wget pour le faire. Des idées?
Vous devez passer l'option -np
/--no-parent
à wget
(en plus de -r
/--recursive
, bien sûr), sinon il suivra le lien dans l'index du répertoire sur mon site au répertoire parent. Donc, la commande ressemblerait à ceci:
wget --recursive --no-parent http://example.com/configs/.vim/
Pour éviter de télécharger les fichiers index.html
générés automatiquement, utilisez l'option -R
/--reject
:
wget -r -np -R "index.html*" http://example.com/configs/.vim/
Pour télécharger un répertoire de manière récursive, qui rejette les fichiers index.html * et les télécharge sans le nom d'hôte, le répertoire parent et la structure de répertoires complète:
wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data
Pour quiconque ayant des problèmes similaires. Wget suit robots.txt
qui pourrait ne pas vous permettre de saisir le site. Pas de soucis, vous pouvez l'éteindre:
wget -e robots=off http://www.example.com/
http://www.gnu.org/software/wget/manual/html_node/Robot-Exclusion.html
Vous devriez utiliser le drapeau -m (miroir), car cela évite de gâcher l'horodatage et de déclencher une récidive indéfiniment.
wget -m http://example.com/configs/.vim/
Si vous ajoutez les points mentionnés par d'autres dans ce fil, ce serait:
wget -m -e robots=off --no-parent http://example.com/configs/.vim/
Voici la commande complète wget qui m'a permis de télécharger des fichiers depuis le répertoire d'un serveur (en ignorant 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/
Si --no-parent
ne vous aide pas, vous pouvez utiliser l'option --include
.
Structure du répertoire:
http://<Host>/downloads/good
http://<Host>/downloads/bad
Et vous voulez télécharger le répertoire downloads/good
mais pas downloads/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/
travaille pour moi.
Peut-être avez-vous un fichier .wgetrc qui interfère avec cela?
Pour extraire un répertoire de manière récursive avec un nom d'utilisateur et un mot de passe, utilisez la commande suivante:
wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/
Tout ce dont vous avez besoin, c'est deux indicateurs, l'un est "-r"
pour la récursivité et "--no-parent"
(ou -np
) afin de ne pas entrer dans '.'
et ".."
. Comme ça:
wget -r --no-parent http://example.com/configs/.vim/
C'est ça. Il sera téléchargé dans l'arborescence locale suivante: ./example.com/configs/.vim
. Toutefois, si vous ne souhaitez pas utiliser les deux premiers répertoires, utilisez l'indicateur supplémentaire --cut-dirs=2
comme suggéré dans les réponses précédentes:
wget -r --no-parent --cut-dirs=2 http://example.com/configs/.vim/
Et il téléchargera votre arborescence de fichiers uniquement dans ./.vim/
En fait, la première ligne de cette réponse provient précisément de wget manual , ils ont un exemple très clair vers la fin de la section 4.3.
Vous devriez pouvoir le faire simplement en ajoutant un -r
wget -r http://stackoverflow.com/
Cette version se télécharge de manière récursive et ne crée pas de répertoires parents.
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"
}
Usage:
~/.bashrc
ou coller dans le terminalwgetod "http://example.com/x/"
Wget 1.18 peut mieux fonctionner, par exemple, je me suis fait piquer par un bogue de la version 1.12 où ...
wget --recursive (...)
... récupère uniquement index.html au lieu de tous les fichiers.
La solution de rechange consistait à remarquer 301 redirections et à essayer le nouvel emplacement - compte tenu de la nouvelle URL, wget a obtenu tous les fichiers du répertoire.