Como criar diretórios contendo index.html com wget --recursive?

1

Estou muito feliz como o wget -r funciona e faz o download das coisas.

Eu configurei um servidor localhost que serve um site e as páginas se parecem com isso:

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

Quando uso wget -r localhost:8080 , cria a seguinte estrutura:

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

bar , foo e 1-and-here-the-slug são arquivos. Eu quero que eles sejam diretórios com um único arquivo neles, chamado index.html e ainda não quebrando os caminhos para os recursos (CSS, JS etc).

Espero algo assim:

.
├── 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

Como posso fazer isso?

    
por Ionică Bizău 25.10.2016 / 16:03

1 resposta

2

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

bar, foo and 1-and-here-the-slug are files. I want them to be directories with a single file in them, named index.html and still not breaking the paths to the resources (CSS, JS etc).

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

Quando você acessar http://localhost:8080/blog/1-and-here-the-slug , o diretório atual será blog , se você renomear essa página para blog/1-and-here-the-slug/index.html , seu novo diretório atual será blog/1-and-here-the-slug . Então você vai quebrar os caminhos relativos dentro do recurso (CSS, JS), se houver. E não há como resolver essa questão sem modificar o HTML interno dos arquivos .

A melhor coisa que você pode fazer é renomear arquivos sem qualquer extensão para ter a extensão html.

├── blog
│   └── 1-and-here-the-slug.html
  1. Mantendo o mesmo diretório, você pode usar o comando rename recursivamente:

Ex:

  find tmp -type f ! -name '*.*' | rename -nv 's/(.*)/$1.html/'
  1. Você pode criar novos diretórios, mas isso quebraria os recursos relativos, se houver

Ex:

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

Você pode reproduzir inserindo a tag <base href=""> no arquivo para especificar o bom caminho para os recursos, mas isso será um trabalho muito caro e caro

  1. ** Ou melhor, use o parâmetro -E wget

EDIT: a leitura da página man wget oferece duas opções maravilhosas

  -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.
    
por 01.11.2016 / 09:28