2009-03-10 5 views
5

ho avuto GNU Wget 1.10.2 per Windows e Linux e l'opzione -k si comporta in modo diverso su quei due.wget -k converte i file in modo diverso su Windows e Linux

-k, --convert-link crea collegamenti in punti HTML scaricati su file locali.

Su Windows produce:

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

e su linux che 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 

Questo è problematico in linux, perché quando io servo lo specchio attraverso Apache non sarà distinguere tra la 4 pagine generate dalla parte dopo il punto interrogativo (?) carattere viene utilizzato come stringa di query per il file.

Qualche idea su come posso controllare questo?

grazie

risposta

11

Non è possibile utilizzare un punto interrogativo (?) In un nome di file su NTFS o FAT32. Questo è il motivo per cui wget usa invece il simbolo at (@).

In Linux, solo una barra (/) è vietata sulla maggior parte dei file system, quindi wget utilizza il punto interrogativo (poiché fa parte dell'URI).

È possibile forzare entrambi i comportamenti utilizzando --restrict-file-names=unix o --restrict-file-names=windows.

Dalla documentazione wget:

Quando la modalità è impostata su “unix”, Wget sfugge il carattere ‘/’ ei caratteri di controllo negli intervalli 0-31 e 128-159. Questo è l'impostazione predefinita su SO tipo Unix.

Quando la modalità è impostato su “finestre”, Wget sfugge i caratteri '\', '|', '/', : '?' '', '"', '*', '<' , '>' e i caratteri di controllo nell'intervallo 0-31 e 128-159. In aggiunta a questo, Wget in modalità Windows utilizza '+' invece di ':' per separare host e porta in locale nomi di file e utilizza '@' invece di '?' per separare la parte della query di dal nome del file. Pertanto, un URL che verrebbe salvato come www.xemacs.org:4300/search.pl?input=blah’ in modalità Unix sarebbero salvati come ‘www.xemacs.org+4300/[email protected]=blah’ in modalità Windows. Questa modalità è il default su Windows.

+0

Grazie molte delle informazioni. Potrei rinominare in massa ma dovrei cercare/sostituire in massa questi riferimenti dall'interno dei file html stessi, giusto? – cherouvim

+0

Sì, e sarebbe più lavoro del necessario. Mi ci è voluto un momento ma ho trovato l'opzione da linea di comando. =) –

4

Questo è problematico in linux, perché quando io servo lo specchio attraverso Apache non distinguerà tra le 4 pagine generate dal momento che la parte dopo il punto interrogativo (?) Il carattere viene utilizzato come stringa di query al file.

Per includere un punto interrogativo in una parte sentiero URL, si può sfuggire:

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

--convert-links dovrebbero fare questo per voi, mi piacerebbe pensare - può essere un bug altrimenti.

0

Questo è problematico in linux, perché quando io servo lo specchio attraverso Apache non distinguerà tra le 4 pagine generate dal momento che la parte dopo il punto interrogativo (?) Il carattere è usato come stringa di query al file .

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

Sostituisce:

Se è già troppo tardi questo comando sed mi ha aiutato? in href = o src = tag con% 3F. (\ x27 è il segno di spunta singolo)

Problemi correlati