Ändern der Dateinamen, BEVOR wget sie herunterlädt (kein Umbenennen lokaler Versionen)

Ändern der Dateinamen, BEVOR wget sie herunterlädt (kein Umbenennen lokaler Versionen)

Ich habe ein Website-Dateisystem, in dem jede Datei zwei Kopien hat, eine Zusammenfassungskopie und eine große Kopie mit unterschiedlichen Namen. Eine große Kopie könnte beispielsweise sein Seiten/info/GK2grkG23r_lg.htmlwährend in der Zusammenfassungskopie die Buchstaben vor der Erweiterung geändert werden alsSeiten/info/GK2grkG23r_sh.html. Ich versuche, ein wget auf dem Dateisystem auszuführen, aber alle Links verweisen konstruktionsgemäß auf die kleine Kopie, um Ressourcen zu sparen, und ich brauche die großen Kopien. Während ich also wget überSeitenlädt möglicherweise alle Zusammenfassungskopien herunter:

pages/info/GK2grkG23r_sh.html
pages/info/2Yp58xr4Ir_sh.html
pages/info/Lmk2nIj23r_sh.html
pages/info/M23Dka6D4r_sh.html

Ich möchte die Namen der Dateien ändern, die wget herunterladen wird:

pages/info/GK2grkG23r_lg.html
pages/info/2Yp58xr4Ir_lg.html
pages/info/Lmk2nIj23r_lg.html
pages/info/M23Dka6D4r_lg.html

Auch wenn die von wget gefundenen Dateien auf den ersten Satz verweisen.

Um das klarzustellen: Ich möchte die Dateien nicht mit der ersten Liste der oben genannten Namen herunterladen und sie dann umbenennen. Ich möchte wget ausführen, das dann versucht, die erste Liste der Dateien herunterzuladen, die Buchstaben jedoch leicht ändert, sodass die zweite Liste heruntergeladen wird. Kann wget das?

Antwort1

Sie können es mit einem Workaround versuchen.

Die Meilensteine ​​sind:

  1. Laden Sie die vollständige Dateiliste herunter und speichern Sie sie in einer Datei
  2. Ändern Sie den letzten Teil der Dateinamen
  3. Laden Sie nur die Dateien mit geändertem Namen herunter.

Sie benötigen eine Datei filter.awkähnlich dieser

/^--.*--  http:\/\/.*[^\/]$/ { u=$3; }
/^Length: [[:digit:]]+/ { print u; }

Schritt für Schritt:

wget -r -np --spider http://yourhost | awk -f filter.awk  > My_List.txt
sed -i s/_sh.html/_lg.html/g My_List.txt
wget -x -i My_List.txt

Credits:
Ich lasse mich inspirieren vondiese Antwort.

Antwort2

Holen Sie sich zuerst die Indexdatei:

wget -O index.html "$URI"

Schreiben Sie dann die darin enthaltenen URLs um:

sed -i '/_sh\(\.html\)/_lg\1/g' index.html

(Ich habe sed verwendet, aber Sie bevorzugen vielleicht z. B. einen XSLT-basierten Ansatz. Treffen Sie Ihre Wahl.)

Sagen Sie wget jetzt, dass es alle abrufen soll pages/info/*, und zwar unter Verwendung der geänderten Indexdatei und ihres ursprünglichen Speicherorts als Start-URI:

wget --recursive --level=1 \
    --input-file=index.html --force-html --base="$URI" \
    --accept-regex 'pages/info/.*_lg\.html'

NB: Die meisten dieser langen Optionen haben kurze Alternativen – siehe Manpage. Ich habe der Übersichtlichkeit halber die lange Form verwendet.

verwandte Informationen