2009-03-10 8 views
5

Mam GNU Wget 1.10.2 dla Windows i Linux, a opcja -k zachowuje się inaczej niż na tych dwóch.wget -k konwertuje pliki różnie na Windows i Linux

-k, --convert-links tworzą linki w pobranych punktach HTML do plików lokalnych.

Z okien produkuje:

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

i na linux produkuje:

 
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 

Jest to problematyczne w linux bo kiedy służę lustro przez Apache nie będzie odróżnić 4 wygenerowane strony, ponieważ część po znaku zapytania (?) jest używana jako ciąg zapytania do pliku.

Jakieś pomysły na to, jak mogę to kontrolować?

dzięki

Odpowiedz

11

Nie można używać znaku zapytania (?) W nazwie pliku na NTFS lub FAT32. Właśnie dlatego wget używa zamiast tego symbolu at (@).

W Linuksie tylko ukośnik (/) jest zabroniony na większości systemów plików, więc wget używa znaku zapytania (ponieważ jest częścią URI).

Można wymusić jedno zachowanie, używając --restrict-file-names=unix lub --restrict-file-names=windows.

Z dokumentacji wget:

Gdy tryb jest ustawiony na „unix”, Wget ucieka znak „/” i znaki kontrolne w zakresach 0-31 i 128-159. Jest to ustawienie domyślne w systemach uniksopodobnych typu .

Gdy tryb jest ustawiony na „okienka”, Wget ucieka znaki '\', '|', '/', : '?' '' '"', '*', '<' , ">" i znaki sterujące w zakresach 0-31 i 128-159. Oprócz tego Wget w trybie Windows używa "+" zamiast ":" do oddzielania hosta i portu w lokalnej nazwy plików i używa "@" zamiast "?", aby oddzielić część zapytania od nazwę pliku od reszty. Dlatego URL, który zostanie zapisany, jako www.xemacs.org:4300/search.pl?input=blah” w trybie Unix będzie zapisany jako «www.xemacs.org+4300/[email protected]=blah» w trybie Windows. Ten tryb jest domyślny w systemie Windows.

+0

Dzięki temu wiele informacji. Mógłbym zmienić nazwę masową, ale musiałbym masowo wyszukiwać/zastępować te odniesienia z samych plików HTML, prawda? – cherouvim

+0

Tak, i to byłoby więcej pracy niż to konieczne. Zajęło mi to chwilę, ale znalazłem opcję wiersza poleceń. =) –

4

Jest to problematyczne w linux bo kiedy służę lustro przez Apache nie będzie rozróżnić 4 generowanych stron ponieważ część po questionmark (?) Znak jest używany jako ciąg zapytania do pliku.

Aby dołączyć znak zapytania w ramach ścieżki URL, można go uniknąć:

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

--convert-linki należy robić to dla ciebie, ja myślę - może być błąd Jeśli nie.

0

Jest to problematyczne w linux bo kiedy służę lustro przez Apache nie będzie odróżnić 4 generowanych stron od część po questionmark (?) Znak jest używany jako ciąg kwerendy do pliku .

Jeśli jest już za późno, to pomogło mi polecenia sed:

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

Zastępuje? w href = lub src = znaczniki z% 3F. (\ x27 jest pojedynczym znacznikiem)

Powiązane problemy