mirror(){
# Mirror Webpages using wget
# By default they will be stored under ~/mirror,
# unless $MIRROR_PATH is set
case $1 in
--help|-h|-?)
cat <<-EOF
A Shell function that will mirror the given URLs in a local
directory. By default this is ~/mirror, but this can be changed
by setting MIRROR_PATH to the desired directory.
It will use wget to mirror the URLs so wget is expected to work.
Usage: mirror <URL>
EOF
;;
*)
if [ -z "$@" ]; then
echo 'Please enter URL or see help (-h|--help|-?)'
else
MIRROR_PATH=${MIRROR_PATH:-~/mirror}
[ -d $MIRROR_PATH ] || mkdir $MIRROR_PATH
for url in "$@"
do
dir="${MIRROR_PATH}/${url#http://}"
if [ -d "$dir" ]; then
echo "Updating $dir"
else
echo "Retrieving $url under $dir"
fi
wget -q -N -nd -k -p -H -P "$dir" "$url"
echo -e "Date: $(date -R)\tURL: $url"> "$dir/doc-get-info.txt"
done
fi
;;
esac
}
Einfach in der .bashrc sourcen und dann mit mirror "URL" eine Website spiegeln. Die Website befindet sich dann unter ~/mirror/<date-URL>, aber wo die Website gespeichert werden soll, ist einstellbar über die Variable $MIRROR_PATH.
Dabei fällt mir auf, warum beschränkt sich wget eigentlich auf maximale 20 Redirects und warum ist das nicht über eine Option steuerbar? Und wieso übertrifft heise.de dieses Limit eigentlich?
Update:
Hm, ich sollte noch prüfen, ob ein Parameter angegeben wurde. Script angepasst.
Update2:
Falls es nicht funktioniert, und das Script mit einem "Unexpected end of file" Fehler aussteigt, dann liegt das wahrscheinlich daran, dass der Tabulator vor EOF im Formular durch Spaces ersetzt wurde. In diesem Fall einfach alle Spaces durch einen echten Tabulator ersetzen oder das EOF an den Zeilenanfang schreiben.
GNAA, das ist schon das 2te Mal, dass ich über diesen dämlichen Bug in der bash stolpere.
