J'ai créé une fonction ~/.bashrc
pour enregistrer certains répertoires Web sur mon disque local. Cela fonctionne bien sauf certains fichiers d’index indésirables qui ne sont pas présents sur le site. Je l'utilise comme
crwl http://ioccc.org/2013/cable3/
mais il récupère également certains fichiers tels que index.html?C=D;O=A index.html?C=D;O=D index.html?C=M;O=A index.html?C=M;O=D index.html?C=N;O=A index.html?C=N;O=D index.html?C=S;O=A index.html?C=S;O=D
Liste complète des fichiers:
kenn@kenn:~/experiment/crwl/ioccc.org/2013/cable3$ ls
bios index.html?C=D;O=A index.html?C=S;O=A screenshot_flightsim4.png
cable3.c index.html?C=D;O=D index.html?C=S;O=D screenshot_Lotus123.png
fd.img index.html?C=M;O=A Makefile screenshot_qbasic.png
hint.html index.html?C=M;O=D runme screenshot_simcity.png
hint.text index.html?C=N;O=A sc-ioccc.terminal screenshot_win3_on_macosx.png
index.html index.html?C=N;O=D screenshot_autocad.png
Je souhaite exclure ces fichiers lors du clonage de ce répertoire avec wget
Existe-t-il un commutateur ou une astuce wget
permettant de cloner un répertoire Web tel quel?
Mon script fonctionne dans .bashrc
:
crwl() {
wget --tries=inf --timestamping --recursive --level=inf --convert-links --page-requisites --no-parent "$@"
}
EDIT: j'ai trouvé deux solutions de contournement possibles
1) Ajout de -R index.html?*
flag
2) Ajout du drapeau -R =A,=D
qui rejette les fichiers index.html?C=D;O=A
sauf index.html
Je ne sais pas lequel est approprié, mais les deux semblent dangereux.
Essayez ceci après le téléchargement, si vous ne voulez pas utiliser le mécanisme de suppression de wget ou si vous êtes sur un système ne supportant pas cette option.
FIND=$($WHICH find)
PWD2=$($WHICH pwd)
SH=$($WHICH sh)
ECHO=$($WHICH echo)
LESS=$($WHICH less)
Commander:
$FIND "$($PWD2)" -regextype posix-egrep -type f -regex '^(.*?html\?C=[DNSM];O=[AD])$' -exec "$SH" -c 'o="{}";$ECHO -f -v "${o}"' \; | $LESS
Lorsque vous êtes satisfait du résultat, procédez comme suit:
(Je ne suis pas responsable de la suppression de tout votre système de fichiers, donc de cette façon.)
RM=$($WHICH rm);export RM
$FIND "$($PWD2)" -regextype ... ;$RM -f -v "${xox}"' \;
J'espère que cela t'aides.
Pour exclure les fichiers de type index tels que ceux avec l'URL index.html?C=...
sans exclure aucun autre type de fichier index.html*
, il est en effet possible de spécifier une spécification plus précise. Essayez: -R '\?C='
Configurer un autre répertoire vide, par exemple
$ mkdir ~/experiment2
$ cd ~/experiment2
Ensuite, une version plus courte de votre commande, sans la récursivité et les niveaux afin de faire un test rapide d’une page:
$ wget --tries=inf --timestamping --convert-links --page-requisites --no-parent -R '\?C=' http://ioccc.org/2013/cable3/
Une fois que wget est terminé, ~/experiment2
n'aura pas de fichiers index.html?C=...
:
.
└── ioccc.org
├── 2013
│ └── cable3
│ └── index.html
├── icons
│ ├── back.gif
│ ├── blank.gif
│ ├── image2.gif
│ ├── text.gif
│ └── unknown.gif
└── robots.txt
4 directories, 7 files
Donc, il a en effet exclu ces répertoires redondants index-sort index.html?C=...
tout en conservant tous les autres répertoires index.html, dans ce cas, il ne s'agit que de index.html
Il suffit donc de mettre en œuvre le -R '\?C='
en mettant à jour votre fonction Shell dans ~/.bashrc
:
crwl() {
wget --tries=inf --timestamping --recursive --level=inf --convert-links --page-requisites --no-parent -R '\?C=' "$@"
}
Ensuite, n'oubliez pas de tester dans un nouveau terminal ou de re-source bash pour le rendre efficace:
$ . ~/.bashrc
Puis essayez-le dans un nouveau répertoire, pour comparaison:
$ mkdir ~/experiment3
$ cd ~/experiment3
$ crwl http://ioccc.org/2013/cable3/
wget -V
indique qu'il s'agit de la version 1.13, cela risque de ne pas fonctionner et vous devez réellement supprimer ces satanés index.html?C=...
ou essayer d'obtenir une version plus récente de wget.-R
ou rejeter un motif, dans ce cas des pages avec ?C=
motif typique des versions index.html?C=...
de index.html
.?
se trouve être un caractère générique wget. Ainsi, pour correspondre à un littéral ?
, vous devez l'échapper en tant que \?
.index.html?C=
. Seulement si vous laissez wget terminer, wget suivra votre spécification -R
et supprimera tous les fichiers index.html?C=...
téléchargés temporairement pour vous.