wget -k تحويل ملفات مختلفة على ويندوز و لينكس
سؤال
لدي غنو 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 هو علامة واحدة)