Utiliser wget pour extraire récursivement un répertoire contenant des fichiers arbitraires
Question
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?
La solution
Vous devez passer l'option -np
/ - no-parent
à wget
(en plus de -r
/ - récursif
, bien sûr), sinon il suivra le lien dans l'index du répertoire sur mon site vers le 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
/ - rejette
:
wget -r -np -R "index.html*" http://example.com/configs/.vim/
Autres conseils
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
, ce 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 renvoyer indéfiniment.
wget -m http://example.com/configs/.vim/
Si vous ajoutez les points mentionnés par d'autres personnes dans ce fil, ce serait:
wget -m -e robots=off --no-parent http://example.com/configs/.vim/
Voici la commande wget complète 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 souhaitez télécharger le répertoire downloads / good
mais pas le répertoire 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 .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écursion et "- aucun parent"
(ou -np
) afin de ne pas entrer dans le '.'
et le ".." et le
. Comme ceci:
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 ne téléchargera votre arborescence de fichiers que dans ./. vim /
En fait, la première ligne de cette réponse provient précisément de Manuel wget , ils ont un exemple très net vers la fin de la section 4.3.
Vous devriez pouvoir le faire simplement en ajoutant un -r
wget -r http://stackoverflow.com/
Wget 1.18 fonctionnera peut-être mieux, par exemple, un bogue de la version 1.12 m'a piqué où ...
wget --recursive (...)
... ne récupère que index.html au lieu de tous les fichiers.
La solution de rechange consistait à remarquer 301 redirections et à essayer le nouvel emplacement & # 8212; compte tenu de la nouvelle URL, wget a obtenu tous les fichiers du répertoire.
Cette version télécharge de manière récursive et ne crée pas de répertoires parent.
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"
}
Utilisation:
- Ajouter à
~ / .bashrc
ou coller dans le terminal -
wgetod & http: //exemple.com/x/"