
Я очень доволен тем, как wget -r
все работает и загружается.
Я настроил локальный сервер, который обслуживает веб-сайт, и страницы выглядят следующим образом:
http://localhost:8080/
http://localhost:8080/foo
http://localhost:8080/bar
http://localhost:8080/blog/
http://localhost:8080/blog/1-and-here-the-slug
При его использовании wget -r localhost:8080
создается следующая структура:
.
├── static-files
│ └── ...
├── bar
├── blog
│ └── 1-and-here-the-slug
├── foo
└── index.html
bar
, foo
и 1-and-here-the-slug
являются файлами. Я хочу, чтобы они были каталогами с одним файлом в них, названными index.html
и не нарушающими пути к ресурсам (CSS, JS и т. д.).
Я ожидаю чего-то вроде этого:
.
├── 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
Как мне это сделать?
решение1
http://localhost:8080/blog/1-and-here-the-slug
bar, foo и 1-and-here-the-slug — это файлы. Я хочу, чтобы они были каталогами с одним файлом в них, названным index.html и при этом не нарушали пути к ресурсам (CSS, JS и т. д.).
├── blog
│ └── 1-and-here-the-slug
│ └── index.html
Когда вы получаете доступ http://localhost:8080/blog/1-and-here-the-slug
к текущему каталогу blog
, если вы переименуете эту страницу в blog/1-and-here-the-slug/index.html
, ваш новый текущий каталог будет blog/1-and-here-the-slug
. Таким образом, вы нарушите относительные пути внутри ресурса (CSS, JS), если таковые имеются. Инет способа решить этот вопрос без изменения внутреннего HTML-кода файлов.
Лучшее, что вы можете сделать, — это переименовать файлы без расширения в файлы с расширением html.
├── blog
│ └── 1-and-here-the-slug.html
- Сохраняя тот же каталог, вы можете использовать
rename
команду рекурсивно:
Бывший:
find tmp -type f ! -name '*.*' | rename -nv 's/(.*)/$1.html/'
- Вы можете создавать новые каталоги, но это нарушит соответствующие ресурсы, если таковые имеются.
Бывший:
find tmp -type f ! -name '*.*' | while read file; do
mv $file $file.tmp;
mkdir $file;
mv $file.tmp $file/index.html;
done
Вы можете поиграться, вставив <base href="">
тег в файл, чтобы указать правильный путь к ресурсам, но это будет очень сложная и дорогая работа.
- **Или лучше используйте
-E
параметр wget
EDIT: чтение wget
страницы руководства даст вам два замечательных варианта
-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.