2009-03-10 6 views
5

yo tengo GNU Wget 1.10.2 para Windows y Linux y la opción -k se comporta de manera diferente en los dos.wget -k convierte archivos de forma diferente en Windows y Linux

-k, --convert-links hacer que los enlaces en el HTML descargado apunten a los archivos locales.

En las ventanas se produce:

 
www.example.com/index.html 
www.example.com/[email protected]=about 
www.example.com/[email protected]=contact 
www.example.com/[email protected]=sitemap 

y en Linux que produce:

 
www.example.com/index.html 
www.example.com/index.html?page=about 
www.example.com/index.html?page=contact 
www.example.com/index.html?page=sitemap 

Esto es problemático en linux porque cuando sirvo al espejo a través de Apache no va a distinguir entre el 4 páginas generadas ya que la parte después del carácter questionmark (?) se utiliza como cadena de consulta para el archivo.

¿Alguna idea sobre cómo puedo controlar esto?

gracias

Respuesta

11

No se puede utilizar un signo de interrogación (?) En un nombre de archivo en NTFS o FAT32. Es por esto que wget usa el símbolo at (@) en su lugar.

En Linux, solo una barra (/) está prohibida en la mayoría de los sistemas de archivos, por lo que wget usa el signo de interrogación (ya que es parte del URI).

Puede forzar cualquiera de los comportamientos usando --restrict-file-names=unix o --restrict-file-names=windows.

De la documentación wget:

Cuando el modo está ajustado en “Unix”, Wget escapa el carácter ‘/’ y los caracteres de control en los rangos de 0-31 y 128-159. Este es el valor predeterminado en OS'es tipo Unix.

Cuando el modo está ajustado a “ventanas”, Wget escapa los caracteres '\', '|', '/', : '?' '', '"', '*', '<' , '>' y caracteres de control en los rangos 0-31 y 128-159. Además de esto, Wget en modo Windows usa '+' en lugar de ':' para separar el host y el puerto en el local nombres de archivo y utiliza '@' en lugar de '?' para separar la parte de la consulta de el nombre del archivo del resto. Por lo tanto, una URL que se guardará como www.xemacs.org:4300/search.pl?input=blah’ en el modo de Unix se guardarán como ‘’www.xemacs.org+4300/[email protected]=blah en el modo de Windows. Este modo es el predeterminado en Windows.

+0

Muchas gracias la información. Podría cambiar el nombre en masa, pero tendría que buscar/reemplazar en masa estas referencias desde el interior de los archivos html, ¿verdad? – cherouvim

+0

Sí, y eso sería más trabajo de lo necesario. Me tomó un momento pero encontré la opción de línea de comandos. =) –

4

Esto es problemático en linux porque cuando sirvo al espejo a través de Apache no va a distinguir entre las 4 páginas generadas desde la parte después del signo de interrogación (?) Se utiliza como el cadena de consulta al archivo.

Para incluir un signo de interrogación en una parte de la ruta URL, puede escapar de ella:

www.example.com/index.html%3Fpage=about 

--convert enlaces deberían estar haciendo esto para usted, pensaría que - puede ser un error si no.

0

Esto es problemático en linux porque cuando sirvo al espejo a través Apache no va a distinguir entre las 4 páginas generadas desde la parte después del signo de interrogación (?) Se utiliza como la cadena de consulta al archivo .

find . -type f -name "*html*" -exec sed -i -r 's/(src|href)=(["\x27])(.*?)(\?)(.*?)\2/\1=\2\3%3F\5\2/g' {} + 

Reemplaza:

Si ya es a finales de este comando sed me ayudó? en href = o src = etiquetas con% 3F. (\ x27 es el tilde)

Cuestiones relacionadas