Wie erstelle ich mit wget --recursive Verzeichnisse, die index.html enthalten?

Wie erstelle ich mit wget --recursive Verzeichnisse, die index.html enthalten?

Ich bin ziemlich zufrieden, wie wget -rdie Dinge funktionieren und heruntergeladen werden.

Ich habe einen Localhost-Server eingerichtet, der eine Website bereitstellt, und die Seiten sehen folgendermaßen aus:

http://localhost:8080/
http://localhost:8080/foo
http://localhost:8080/bar
http://localhost:8080/blog/
http://localhost:8080/blog/1-and-here-the-slug

Wenn ich wget -r localhost:8080es verwende, wird die folgende Struktur erstellt:

.
├── static-files
│   └── ...
├── bar
├── blog
│   └── 1-and-here-the-slug
├── foo
└── index.html

barund foo sind 1-and-here-the-slugDateien. Ich möchte, dass es Verzeichnisse mit einer einzelnen Datei darin sind, benannt index.htmlund trotzdem die Pfade zu den Ressourcen (CSS, JS usw.) nicht unterbrechen.

Ich erwarte so etwas:

.
├── static-files
│   └── ...
├── bar
│   └── index.html
├── foo
│   └── index.html
├── blog
│   ├── index.html // <---------- Also I want this one here to show the blog
│   └── 1-and-here-the-slug
│       └── index.html
└── index.html

Wie kann ich das machen?

Antwort1

http://localhost:8080/blog/1-and-here-the-slug

bar, foo und 1-and-here-the-slug sind Dateien. Ich möchte, dass es sich dabei um Verzeichnisse mit einer einzelnen Datei namens index.html handelt und die Pfade zu den Ressourcen (CSS, JS usw.) trotzdem nicht unterbrochen werden.

├── blog
│   └── 1-and-here-the-slug
│       └── index.html

Wenn Sie auf http://localhost:8080/blog/1-and-here-the-slugdas aktuelle Verzeichnis zugreifen blogund diese Seite in umbenennen blog/1-and-here-the-slug/index.html, lautet Ihr neues aktuelles Verzeichnis blog/1-and-here-the-slug. Dadurch werden die relativen Pfade innerhalb der Ressource (CSS, JS), falls vorhanden, unterbrochen. UndEs gibt keine Möglichkeit, diese Frage zu lösen, ohne das innere HTML der Dateien zu ändern.

Am besten benennen Sie Dateien ohne Erweiterung um, sodass sie die Erweiterung „html“ erhalten.

├── blog
│   └── 1-and-here-the-slug.html
  1. Wenn Sie das gleiche Verzeichnis beibehalten, können Sie den renameBefehl rekursiv verwenden:

Ex:

  find tmp -type f ! -name '*.*' | rename -nv 's/(.*)/$1.html/'
  1. Sie können zwar neue Verzeichnisse erstellen, aber dies würde die relativen Ressourcen, falls vorhanden, zerstören

Ex:

  find tmp -type f ! -name '*.*' | while read file; do
       mv $file $file.tmp;
       mkdir $file;
       mv $file.tmp $file/index.html;
 done

Sie können spielen, indem Sie das <base href="">Tag in die Datei einfügen, um den richtigen Pfad zu den Ressourcen anzugeben, aber das wird eine Menge harte und teure Arbeit sein

  1. **Oder besser, verwenden Sie den -Ewget-Parameter

EDIT: Lesen wgetder Manpage gibt Ihnen zwei wunderbare Optionen

  -E
  --adjust-extension
       If a file of type application/xhtml+xml or text/html is downloaded
       and the URL does not end with the regexp \.[Hh][Tt][Mm][Ll]?, this option
       will cause the suffix .html to be appended to the local filename. 

  -k
   --convert-links
       After the download is complete, convert the links in the document to
       make them suitable for local viewing.  This affects not only the visible
       hyperlinks, but any part of the document that links to external content, 
       such as embedded images, links to style sheets, hyperlinks to non-
       HTML content, etc.

verwandte Informationen