Как создать каталоги, содержащие index.html, с помощью wget --recursive?

Как создать каталоги, содержащие index.html, с помощью wget --recursive?

Я очень доволен тем, как 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
  1. Сохраняя тот же каталог, вы можете использовать renameкоманду рекурсивно:

Бывший:

  find tmp -type f ! -name '*.*' | rename -nv 's/(.*)/$1.html/'
  1. Вы можете создавать новые каталоги, но это нарушит соответствующие ресурсы, если таковые имеются.

Бывший:

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

Вы можете поиграться, вставив <base href="">тег в файл, чтобы указать правильный путь к ресурсам, но это будет очень сложная и дорогая работа.

  1. **Или лучше используйте -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.

Связанный контент