الاستفادة من حلقات التكرار في shell وجلب الملفات من السيرفرات



السلام عليكم
في احد المرات واجهت مشكلة وهي نقل ملفات من خادم (serve) الي خادم (server)  اخر, اول ما خطر علي بالي هو تحميل الملفات ورفعه الي الخادم الاخر, ولكن هذه الطريقة متعبة جدا ومكلفة, وكذلك مشكلة اخرى وهي  اذا كان الخادم الذي لدي ليست فيه لوحة تحكم لتسهيل رفع الملفات.



ولحل هذه المشكلة هناك امر يمكنك استخدامه لجلب الملفات من خادم الي خادم اخر دون الحاجة الي تحميل الملفات واعادة رفعها.
وصيغة كتابة هذه الامر كالتالي:

wget http://server10.mp3quran.net/ajm/64/001.mp3

يتم كتابة الامر wget ثم مسافة قم رابط الملف المراد جلبه, وفي هذا المثال هو جلب  سورة الفاتحة من احد خوادم موقع mp3quran , والامر wget  يحتوي علي العديد من الخيارات.


ولكن واجهت مشكلة اخرى وهي جلب اكثر من 100 ملف !!! , شئ متعب وممل هو كتابة كل مرة لجلب ملف واحد, مثل

wget http://server10.mp3quran.net/ajm/64/001.mp3
و
wget http://server10.mp3quran.net/ajm/64/002.mp3
و
wget http://server10.mp3quran.net/ajm/64/003.mp3

وهكذا ......

وهنا يأتي دور حلقات التكرار for , وصيغتها



for i in 1 2 3 hello
do
#some of code
done

في هذه الاسطر يتم في البداية تنفيذ السطر الاول ويتم اسناد الرقم 1 الي قيمة i ومن ثم يتم تنفيذ السطر الثاني ومن ثم يتم تنفيذ السطر الثالث والرابع, ويتم الرجوع الي بداية الحلقة يتم اسناد 2 الي قيمة i ويتم تنفيذ باقي الاسطر, وعند تنفيذ اخر سطر, يتم الرجوع الي بداية الحلقة واسناد 3 الي i وتنفيذ باقي الاسطر, وعند تنفيذ اخر سطر, يتم الرجوع الي بداية الحلقة واسناد hello الي i وتنفيذ باقي الاسطر وعند الوصول الي اخر يتم الخروج من الحلقة.
وكما تلاحظ يتم كتابة الاسطر من الاوامر بين كلمتي do و done, حيث do بداية تنفيذ الاوامر وdone نهاية تنفيذ الاوامر.

ولكن ماذا لو اردت جلب جميع السور من موقع mp3quran لقارئ معين


for i in 001 002 003 005 004 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

do

http://server12.mp3quran.net/maher/$i.mp3

done

في هذا المثال يتم جلب جميع سور القارئ ماهر المعيقلي, لاحظ بين كلمتي do و done هناك متغير $i ولاحظ علامة الدولار قبل حرف i , حيث يتم استخدام قيمة المتغيرالتي تم اسنادها في البداية في for, ويتم المرور عليها قيمة قيمة.

لكن ماذا لو لديك اسماء الملفات ليس متسلسلة في هذه الحالة يتم تيم استبدال الارقام باسماء الملفات او روابطها مثل


for i in http://ar.wordpress.org/wordpress-3.5-ar.zip http://ar.wordpress.org/wordpress-3.5.1-ar.zip
do

wget i

done

في هذا المثال سوف يتم تحميل سكربت wordpress الاصدار 3.5 ومن ثم عند دخول الحلقة مرة مرة سوف يتم تحميل الاصدار 3.5.1 ومن ثم الخروج من الحلقة.

طبعا هناك استخدامات كثير يعتمد عليك وكيفية توظيفها لتسهيل أداء المهام, علي سبيل المثال الامر wget تستطيع به نقل قاعدة البيانات وكذلك ملفات الموقع من server الي server اخر اذا كنت تريد الترقية الخادم الخاص بك, مستوي متقدم قليلا ولكنه بسيط اذا كانت لديك الخبرة في التعامل مع سطر الاوامر.

جربت من قبل استخدام الامر wget لسحب ملف من احد مواقع تحميل الملفات الشهيرة لست اتذكره بصراحة, وكنت اريد نقل الملف الي سيرفر خاص بي لأستطيع تحميله في أي وقت اخر مع امكانية استكمال التحميل وبدون تحديد قيود من الخادم الخاص بي, لان يعض المواقع التحميل يتم جلب الملف للمستخدم وتجهيزه للتحميل, وبعد بدء التحميل وفي حالة الاتصال الضعيف بعد وقت معين يتم قطع الاتصال بالنسبة للملف الذي تحمل فيه وبالتالي تضطر الي اعادة التحميل من جديد, وكذلك مشكلة للأتصالات الضعيفة والاتصالات الي تحدث فيه انقطاعات كثيرة مثل اتصالي :( , ولكن التجربة لم تنجح :) , جرب ممكن ان تعمل معك الطريقة

0 التعليقات :

إرسال تعليق