![Wie erstelle ich mit wget --recursive Verzeichnisse, die index.html enthalten?](https://rvso.com/image/97239/Wie%20erstelle%20ich%20mit%20wget%20--recursive%20Verzeichnisse%2C%20die%20index.html%20enthalten%3F.png)
Ich bin ziemlich zufrieden, wie wget -r
die 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:8080
es verwende, wird die folgende Struktur erstellt:
.
├── static-files
│ └── ...
├── bar
├── blog
│ └── 1-and-here-the-slug
├── foo
└── index.html
bar
und foo
sind 1-and-here-the-slug
Dateien. Ich möchte, dass es Verzeichnisse mit einer einzelnen Datei darin sind, benannt index.html
und 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-slug
das aktuelle Verzeichnis zugreifen blog
und 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
- Wenn Sie das gleiche Verzeichnis beibehalten, können Sie den
rename
Befehl rekursiv verwenden:
Ex:
find tmp -type f ! -name '*.*' | rename -nv 's/(.*)/$1.html/'
- 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
- **Oder besser, verwenden Sie den
-E
wget-Parameter
EDIT: Lesen wget
der 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.