wget -k تحويل ملفات مختلفة على ويندوز و لينكس

StackOverflow https://stackoverflow.com/questions/629831

  •  08-07-2019
  •  | 
  •  

سؤال

لدي غنو Wget 1.10.2 ويندوز و لينكس ، -k الخيار يتصرف بشكل مختلف عن هذين.

-ك --تحويل روابط جعل روابط تحميل HTML أشر إلى الملفات المحلية.

على ويندوز وتنتج:

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

و على لينكس فإنه ينتج:

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

هذا هو إشكالية في لينكس لأنه عندما أقدم مرآة خلال أباتشي فإنه لا يميز بين 4 الصفحات التي تم إنشاؤها منذ الجزء بعد questionmark (?) حرف يتم استخدام سلسلة الاستعلام إلى الملف.

أي أفكار عن كيف يمكن السيطرة على هذا ؟

شكرا

هل كانت مفيدة؟

المحلول

لا يمكنك استخدام علامة استفهام ( ؟ ) في اسم الملف على NTFS أو FAT32.هذا هو السبب wget يستخدم في رمز (@) بدلا من ذلك.

في لينكس فقط خط مائل (/) يحظر على معظم أنظمة الملفات حتى wget تستخدم علامة الاستفهام (لأنه جزء من URI).

يمكنك القوة إما السلوك باستخدام --restrict-file-names=unix أو --restrict-file-names=windows.

من wget الوثائق:

عندما يتم تعيين وضع إلى "unix" ، مجلد مشترك يهرب حرف '/' ، أحرف التحكم في نطاقات 0-31 و 128-159.هذا هو الافتراضي على Unix وفاق.

عندما يتم تعيين وضع على "ويندوز" ، Wget يهرب الشخصيات '\', '|', '/', ':', '?', '"', '*', '<', ' > ' ، أحرف التحكم في نطاقات 0-31 و 128-159.بالإضافة إلى هذا, Wget في نظام التشغيل Windows يستخدم وضع '+' بدلا من ':' فصل host و port في المحلية أسماء الملفات و يستخدم '@' بدلا من '?' فصل الاستعلام جزء من اسم الملف من بقية.ولذلك URL التي يتم حفظها كما 'www.xemacs.org:4300/search.pl?input=blah' في Unix الوضع سيكون حفظ 'www.xemacs.org+4300/search.pl@input=blah' في وضع Windows.هذا الوضع هو افتراضي على Windows.

نصائح أخرى

هذا هو إشكالية في لينكس لأنه عندما أقدم مرآة خلال أباتشي فإنه لا يميز بين 4 الصفحات التي تم إنشاؤها منذ الجزء بعد questionmark (?) حرف يتم استخدام سلسلة الاستعلام إلى الملف.

إدراج علامة استفهام في مسار URL جزء, يمكنك الهروب من ذلك:

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

--تحويل الروابط يجب أن أفعل هذا بالنسبة لك, كنت أعتقد — قد يكون خطأ إذا لم يكن.

هذا هو إشكالية في لينكس لأنه عندما أقدم مرآة خلال أباتشي فإنه لا يميز بين 4 الصفحات التي تم إنشاؤها منذ جزء بعد questionmark (?) حرف يتم استخدام سلسلة الاستعلام إلى الملف.

إذا كان هو بالفعل في وقت متأخر من هذا sed الأمر ساعدني:

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

فإنه يستبدل ?في href= أو src= الكلمات الدليلية مع %3F.(\x27 هو علامة واحدة)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top