چرا گنو/لینوکس را دوست دارم؟ دانلود همهٔ لینکهای یک صفحهٔ وب
دوشنبه, ۲۸ دی ۱۳۹۴، ۰۸:۳۳ ب.ظ
چند وقت پیش دنبال یه چی میگشتم که دانلودش کنم، به یه صفحهٔ وب رسیدم که علاوه بر اون چیزی که من میخواستم کلی لینک دیگه داشت، و من تصمیم گرفتم همهٔ لینکهای اون صفحه رو دانلود کنم. اما کلیک کردن روی دونهدونه لینک ها یا کپی کردن دونهدونهٔ اونها کاری حوصلهسربر بود. تصمیم گرفتم همهاش رو یک جا کپی کنم و یک جا دانلود کنم.
برای این کار ابتدا از افزونهٔ Web Developer فایرفاکس استفاده کردم و از طریق منوی Information این افزونه، گزینهٔ View Link Information رو انتخاب کردم و یک صفحه برام باز شد که تمام لینکهارو آورده بود. تمام متن اون صفحه رو کپی کردم و تو یه فایل به اسم links ریختم.
مسالهٔ بعدی حذف لینکهای اضافی بود. من تو این صفحه تمام لینکهای رو میخواستم که پسوند .zip داشتن. خب تو ترمینال گنو/لینوکس این کار به راحتی با دستور cat و grep امکانپذیره.
برای این کار ابتدا از افزونهٔ Web Developer فایرفاکس استفاده کردم و از طریق منوی Information این افزونه، گزینهٔ View Link Information رو انتخاب کردم و یک صفحه برام باز شد که تمام لینکهارو آورده بود. تمام متن اون صفحه رو کپی کردم و تو یه فایل به اسم links ریختم.
مسالهٔ بعدی حذف لینکهای اضافی بود. من تو این صفحه تمام لینکهای رو میخواستم که پسوند .zip داشتن. خب تو ترمینال گنو/لینوکس این کار به راحتی با دستور cat و grep امکانپذیره.
cat links | grep .zip > downloads
دستور cat محتویات فایل رو در خروجی قرار میده و grep تمام خطهایی که .zip تو اونها هست انتخاب میکنه و همهٔ اینها تو یه فایل جدید ریخته میشه. خب الان من تمام لینکهایی رو که میخواستم داخل یک فایل دارم. مرحلهٔ بعدی اینه که یه با استفاده از یه برنامهٔ دانلود این لینکها رو دانلود کنم. من از برنامهٔ axel استفاده میکنم. برای همین باید تمام این لینکها رو با axel دریافت کنم. برای همین axel رو به اول هر خط اضافه کردم. اما دستی اضافه نکردم و از دستور فوقالعاده جذاب sed استفاده کردم.
cat downloads | sed 's/[ ]/axel /' > download.sh
دستور بالا میگه که محتوای فایل بریز تو یه فایل جدید به اسم downlooad.sh و این که جای اسپیس اول هر خط عبارت axel رو قرار بده. چون من از طریق افزونهٔ Web Developer لینکها رو کپی کردم، اول هر کدوم یه اسپیس قرار گرفته. در کل برنامهٔ sed خیلی خوب و کار راه بینداز هست، در موردش بیشتر بخونید، تا تجربهٔ خوشایندتری رو در گنو/لینوکس داشته باشید. حالا تنها کافیه این فایل رو اجرا کنم و صبر کنم که تمام فایلهایی که میخواستم دانلود شن.
sh download.sh
البته با افزونههایی مثل FlashGot هم میشه این کار رو کرد، و من هم بعضی وقتها ازش استفاده میکنم، ولی خب باید دونهدونه لینکها رو انتخاب کرد و برای اون صفحه کاری دشوار بود و استفاده از grep برای انتخاب کردن راحتتر و سریعتر هست.
wget -r -l1 -H -t1 -nd -N -np -A.zip -erobots=off [url of website]
-r recursive
-l1 maximum recursion depth (1=use only this directory)
-H span hosts (visit other hosts in the recursion)
-t1 Number of retries
-nd Don't make new directories, put downloaded files in this one
-N turn on timestamping
-A.zip download only zips
-erobots=off execute "robots.off" as if it were a part of .wgetrc