Как создать каталоги, содержащие 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 

Как я могу это сделать?

  • routing wget --recursive для stdout (как в -O -), а не файл
  • Как запретить wget загружать списки каталога Apache в разных заказах?
  • Можно ли загрузить эти веб-страницы в виде книги?
  • Не удается загрузить завиток
  • bash не может найти команду mvn после установки
  • Использование sed для добавления URL-адреса в начало каждой строки
  • Невозможно wget из github, sslv3 ошибка рукопожатия
  • Как загрузить файл путем подделки IP-адреса запроса?
  • One Solution collect form web for “Как создать каталоги, содержащие index.html с помощью wget -recursive?”

    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 к 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=""> в файл, чтобы указать хороший путь к ресурсам thr, но это будет очень тяжелая дорогостоящая работа

    1. ** Или лучше, используйте параметр -E wget

    EDIT: чтение страницы wget man дает вам два замечательных варианта

      -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. 
    Linux и Unix - лучшая ОС в мире.