من امروز لازم داشتم که یه سری لینک رو از توی یه صفحهی وب پیدا کنم تا بتونم یکی یکی دانلودشون کنم. طبیعتاً مثه هیچ لینوکسکار دیگهای حوصلهی منم به این کار نمیرسه مخصوصاً اگه ابزار مورد نیاز رو داشته باشم. پس توی سه سوت مشکل رو حل میکنم:
سوت اوّل: سورس صفحهای رو که لینکها رو ارائه میده رو پیدا به شکل یه فایل متنی ذخیره میکنم و اسمش رو میزارم dirvers-source.txt. محتویات اون شبیه به خطوط زیر هستن:
<b>Chipset</b><br /> Intel Chipset Support for Microsoft Windows 7 (32-bit, 64-bit)<br /> Version : 9.3.0.1019<br /> Released : 18 Apr 2012<br /> File size : 1.52 MB<br /> File name : h1ic02ww.exe<br /> <a data-mce-href="http://download.lenovo.com/consumer/mobiles/h1ic02ww.exe" href="http://download.lenovo.com/consumer/mobiles/h1ic02ww.exe" target="_blank">Download</a></div>
که همهی لینکهای مورد نظر شامل کلمهی exe هستن.
سوت دوّم: با دستور زیر لینکها رو از بین عبارتهای دیگه میکشم بیرون و توی فایل متنی دیگهای به اسم links.txt ذخیره میکنم.
grep -i exe drivers-source.txt | grep -iv file | cut -d "\"" -f2 | grep -iv , > links.txt
خروجی این دستور به این شکل هست:
http://download.lenovo.com/consumer/mobiles/h1ic02ww.exe http://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles/h1ic03ww.exe http://download.lenovo.com/consumer/mobiles/h1ar12ww.exe
قسمت اوّل که معلومه کلیه خطوطی که کلمهی exe رو شامل میشن رو پیدا میکنم به طوریکه با آپشن i به grep گفتم که از بزرگی و کوچکی حروف صرف نظر کنه.
قسمت دوّم اینکه همهی اون خطوطی از قسمت اوّل رو که شامل کلمهی file هستن رو با استفاده از آپشن v دستور grep نادیده میگیرم. خروجی رو به دستور cut انتقال میدم.
در قسمت سوّم با استفاده از آپشن d جداکنندهی مورد استفادهی دستور cut رو تغییر میدم و برابر جفت کوتیشن (quotation mark – “) میزارم و با استفاده از آپشن f بهش میگم که فیلد دوّم رو برگردونه. و در نهایت خروجی رو به فایل متنی مورد نظر با اسم links.txt ارسال میکنم.
سوت سوّم و در نهایت با استفاده از دستور wget و آپشنهای c و i شروع به دانلود میکمیم.