محاسبه حداکثر مقدار دانلود شبانه با بش اسکریپت

همیشه واسم سوال بود که من چقدر توی یک شب میتونم دانلود کنم… چون عملا تا حالا نشده که دانلودم تا صبح تموم نشه! خب راه معمولی اینه که تا میتونم فایل بذارم برای دانلود و صبح ببینم چقدرش دانلود شده. ولی اگه مثل من هاردتون تا خرخره پر بود چیکار میکردین؟ احتمالا میگفتین یه فایل کم حجم رو بذارم برای دانلود و ببینم چقدر طول میکشه تا دانلود بشه بعد حساب کنم که تا صبح چقدر میتونم دانلود کنم… ولی اصلا با این راه حل حال نمیکنم!!! به همین خاطر تصمیم گرفتم یه بش اسکریپت بنویسم که به صورت تقریبی محاسبه کنه چقدر توی یک شب میتونم دانلود کنم. اول قدم اینه که با روشی که من فایل‌هام رو دانلود میکنم آشنا بشین، پس این تاپیک تو انجمن اوبونتو فارسی رو اول بخونید تا با روش دانلود من آشنا بشین. خب حالا که میدونید قراره چجوری دانلود بکنم میریم سراغ اسکریپت :)) تو پوشه Home یه فایل به اسم dl.sh ایجاد میکنیم و داخلش این کدها رو قرار میدیم:

 

declare -i n
n=0
while true; do
	aria2c -c -x16 -s16 -k 1M -m10000 --retry-wait=1 http://cachefly.cachefly.net/100mb.test
	n=n+100
	a=$n"MB"
	echo $a > size.txt
	rm 100mb.test
done

 

 

حالا باید به این اسکریپت قابلیت اجرا شدن بدیم. پس ترمینال رو باز میکنیم و این دستور رو توش میزنیم:

 

chmod +x dl.sh

 

و برای اینکه این اسکریپت اجرا بشه تو کرون تب در زمانی که شبانه شروع میشه این دستور رو میزنیم:

 

./dl.sh

 

خب کار تموم شد و صبح که بیدار بشیم تو پوشه Home یه فایل به اسم size.txt قرار داره که توش نوشته شده شب گذشته چقدر تونستیم دانلود کنیم 😀 ولی یه نگاهی هم بندازیم که این بش اسکریپت دقیقا چیکار میکنه…

 

declare -i n: میگیم متغییر n رو به عنوان یک متغییر عددی بشناس که روش میشه عملیات ریاضی انجام داد. (خودمم شاخ در آوردم که میشه تو بش اسکریپت متغییر تعریف کرد!)

 

n=0: توضیح نداره دیگه!

 

while true; do: با این دستور ما یک لوپ یا حلقه بینهایت درست میکنیم و دستوراتی که بین این خط تا خط آخر یعنی done قرار دارن بینهایت بار اجرا میشن.

 

aria2c: درواقعی خطی که این عبارت آغازش هست وظیفه اصلی رو به عهده داره! تو این بش من درواقع اومدم و با دانلود چند باره یک فایل محاسبه کردم که توی یک شب چقدر میشه دانلود کرد. فقط مساله اینه که از چه لینکی استفاده کردم؟ من از فایل‌هایی که cachefly قرار داره تا دانلود کنیم و سرعت دانلودمون رو محاسبه کنیم استفاده کردم. کش فلای سه فایل با سایزهای یک مگ، ده مگ و صد مگ رو قرار داده برای تست سرعت. من از فایل صد مگی استفاده کردم. چون من تقریبا همیشه فایل‌هایی که دانلود میکنم بالای صد مگ هست (۹۰٪ من فیلم دانلود میکنم) و ساختار aria2c هم تو این بش اینه که هرچی حجم یک فایل بیشتر بود کانکشن بیشتری بساز وسرعت بالاتری داشته باش پس انتخاب این فایل صد مگی کاملا معقول بود.

 

n=n+100: خب بعد از اتمام دانلود ما تونستیم صد مگ فایل رو دانلود کنیم پس به متغییر n صد واحد اضافی میکنیم که نشون میگه صد مگ دانلود علاوه بر دانلودهای قبلی با موفقیت به انجام رسیده.

 

a=$n”MB”: با این دستور میگیم محتویات متغییر n رو بریز توی متغییر a و آخرش هم عبارت MB رو اضافه کن. چی شد!

 

echo $a > size.txt: با این دستور اگه فایلی به اسم size.txt وجود نداشته باشه ایجاد میشه و محتویاتش از بین میره و مقدار متغییر a داخلش قرار میگیره.

 

rm 100mb.test: فایلی رو که دانلود کردیم پاک میکنه چون قراره دوباره دانلود بشه 😀 یکی دیگه از دلایل که از فایل صدمگی استفاده کردم این دستور بود. چون این دستور زمان میبره حالا هر چقدر هم کم باشه (فکر کنم نزدیک به یک ثانیه زمان میبره) و خب اگه فایل یک مگابایتی میذاشتیم برای دانلود این دستور ممکن بود هزار بار و یا بیشتر اجرا بشه و این یعنی از دست دادن هزار ثانیه که تقریبا میشه یک ربع و این دقت کارمون رو میاره پایین.

 

done: که همونطور که گفتم میگه دوباره برو حلقه رو از اول اجرا کن 🙂

 

اما نتیجه این دستورات زیبا روی سیستم خودم… دیشب این بش اسکریپت رو گذاشتم اجرا بشه و نتیجش این فایل شد:

 

bash_dl

 

 

بعله… من دیشب تونستم ۴/۷ گیگ دانلود کنم. ولی تو پوشه Home یه فایل تست بود که کامل دانلود نشده بود برای اینکه ببینم چقدرش دانلود شده ترمینال رو باز کردم و کد زیر رو زدم تا دوباره دانلودش شروع بشه و ببینم چقدرش دانلود شده:

 

aria2c -c http://cachefly.cachefly.net/100mb.test

 

و دیدم نوشته که ۹۶مگابایت از این فایل صد مگابایتی دانلود شده. پس من این رو تقریبا صد مگابایت در نظر میگیرم و این یعنی من شب گذشته ۴/۸گیگ دانلود کردم :)) ولی یه نکته دیگه! من در عمل فایل‌های بالای صد مگ دانلود میکنم و چندتا فایل رو هم به صورت همزمان دانلود میکنم و این یعنی سرعت دانلود بیشتر. پس میتونم راحت بگم من میتونم شبی ۵گیگ دانلود کنم… 😀 تا دیداری دگر بدرود :))

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.