شگفتی های دستور wget

۱۳۸۹/۱۲/۲۱

دستور wget یکی از مناسب ترین گزینه ها برای دانلود از اینترنت است،wget می تواند حالت هایی پیچیده از دانلود رو به زیبایی مدیریت کند،مثلا دانلود فایلهایی با حجم بالا،دانلود های بازگشتی،دانلود های غیر تعاملی،دانلود چندین فایل و غیره.در این مقاله میخواهم ۱۵ روش با مثال برای حالت های مختلف دانلود بیان کنم.


۱−دانلود یک فایل با wget
با مثال زیر می توانید یک فایل را از اینترنت و آدرس مورد نظرتون دانلود کرده و در دایرکتوری جاری ذخیره کنید.

 wget http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2

در هنگام دانلود یک Progress Bar یا همان نوار پیشرفت به شما نشان داده میشود که دارای اطلاعاتی از دانلود است.
 
هنگام دانلود:

$ wget http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2
Saving to: `strx25-0.9.2.1.tar.bz2.1'

31% [=================> 1,213,592   68.2K/s  eta 34s

بعد از اتمام دانلود:

$ wget http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2
Saving to: `strx25-0.9.2.1.tar.bz2'

100%[======================>] 3,852,374   76.8K/s   in 55s

2009-09-25 11:15:30 (68.7 KB/s) - `strx25-0.9.2.1.tar.bz2' saved [3852374/3852374]

۲−دانلود و ذخیره کردن فایل با نامی دیگر با استفاده از wget -O
به صورت پیشفرض،دستور wget نام کلمه ای که بعد از آخرین اسلش / قرار دارد را به عنوان اسم فایل قرار میدهد که شاید گاهی اوقات مناسب نباشد.

ناصحیح:به عنوان مثال ما فایلی با به صورت زیر دانلود و ذخیره کردیم:
download_script.php?src_id=7701

wget http://www.vim.org/scripts/download_script.php?src_id=7701

حتی اگر فایل دانلود شده در قالب زیپ هم باشد،به صورت زیر ذخیره و نمایش داده میشود:

ls
download_script.php?src_id=7701

صحیح:شکل صحیح قضیه به این شکل است که ما با کمک دستور wget -o این مشکل را حل کنیم:

 wget -O taglist.zip http://www.vim.org/scripts/download_script.php?src_id=7701

۳− تعیین کردن سرعت دانلود با استفاده از wget –limit-rate
زمانیکه ما دستور wget رو اجرا میکنیم به صورت پیش فرض کل پهنای باندمون رو اشغال میکنه،شاید خیلی جاها این کار مناسب نباشه و مشکلاتی رو در پی داشته باشه،با این پیش فرض میتونیم سرعت دانلودمون رو لیمیت کنیم.

 wget --limit-rate=۱۰k http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2
 

۴− ادامه دانلود نیمه تمام مانده با استفاده از wget -c
می تونید فایلی که در اوسط دانلود متوقف کردید را با استفاد از دستور زیر ادامه بدهید:

wget -c http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2
 

این روش زمانی که یک فایل بزرگ رو دانلود میکنیم و وسطای دانلود یه وقفه به وجود میاد سودمنده…
 
۵−دانلود در پس زمینه با wget -b
برای دانلود های بزرگ بهتره اونا رو تو پس زمینه قرار بدید :

$ wget -b http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2
Continuing in background, pid 1984.
Output will be written to `wget-log'
 

با استفاده از دستور tail -f میتونید وضعیت دانلودتون رو مشاهده کنید:

tail -f wget-log
Saving to: `strx25-0.9.2.1.tar.bz2.4'

     0K .......... .......... .......... .......... ..........  1% 65.5K 57s
    50K .......... .......... .......... .......... ..........  2% 85.9K 49s
   100K .......... .......... .......... .......... ..........  3% 83.3K 47s
   150K .......... .......... .......... .......... ..........  5% 86.6K 45s
   200K .......... .......... .......... .......... ..........  6% 33.9K 56s
   250K .......... .......... .......... .......... ..........  7%  182M 46s
   300K .......... .......... .......... .......... ..........  9% 57.9K 47s
 

۶−پنهان کردن واسط کاربری و ارائه wget همانند یک مرورگر با استفاده از –user-agent
بسیاری از سایت ها اجازه دانلود فایل رو زمانیکه رابط کاربریتون یک مرورگر نباشه رو نمیدهند،در این وضعیت میتونید رابط کاربریتون رو همانند مثال زیر تغییر بدهید:

wget --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3" URL-TO-DOWNLOAD

۷−امتحان آدرس دانلود توسط wget –spider
زمانیکه شما میخواهید برای دانلودتان برنامه ریزی کنید باید از وجود لینک و آدرس های دانلودتان مطمئن باشید،برای این کار به صورت زیر عمل کنید:

wget --spider DOWNLOAD-URL

اگه url جواب صحیح بگیرد به صورت زیر خواهد شد:

 wget --spider download-url
Spider mode enabled. Check if remote file exists.
HTTP request sent, awaiting response... 200 OK
Length: unspecified 1
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.

این یعنی شما میتونید در وقت برنامه ریزی شده دانلودتون رو انجام بدهید،اما اگر شما جواب ناصحیح بگیرد به صورت زیر خواهد بود:

 wget --spider download-url
Spider mode enabled. Check if remote file exists.
HTTP request sent, awaiting response... 404 Not Found
Remote file does not exist -- broken link!!!

۸− افزایش مقدار تلاش دوباره، برای دانلود یک فایل با wget –tries
اگر سرعت اینترنتتون پایینه و اگه حجم فایل دریافتی بالاست احتمال شکست در دانلود وجود دارد،wget به صورت پیشفرض ۲۰ بار برای دانلود دوباره فایل اقدام میکند که میتوانید به صورت زیر این مقدار را افزایش دهید:

wget --tries=75 DOWNLOAD-URLk!!!

۹−دانلود چندین فایل از آدرس های مختلف با Wget -i
ابتدا آدرس فایلهایی که قرار است دانلود شوند را در یک فایل متنی ذخیره می کنیم:

cat > download-file-list.txt
URL1
URL2
URL3
URL4

سپس به عنوان ورودی،فایل را دریافت میکنیم به صورت زیر:

wget -i download-file-list.txt

۱۰− دانلود کل یک وبسایت با استفاده از wget –mirror
دستور زیر برای زمانیکه میخواهید یک وبسایت را به صورت کامل دانلود کرده و به صروت لوکال استفاده کنید:

wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL

۱۱−نپذیرفتن فایل تایپ های(File Type) خاص با wget –reject

wget --reject=gif WEBSITE-TO-BE-DOWNLOADED

۱۲−ایجاد لاگ فایل جدا گانه با wget -o

wget -o download.log DOWNLOAD-URL

۱۳−خروج از دانلود زمانیکه حجم فایل دانلود بیش از حد مجاز باشد wget -Q
برای مثال میخوایید زمانیکه حجم فایل دانلود بیش از حد مجاز مثلا بیشتر از ۵ مگ شد از دانلود خارج شود:

wget -Q5m -i FILE-WHICH-HAS-URLS

۱۴−دانلود فایل هایی با پسوند خاص با wget -r -A
اگه دلتان میخواهد کل فایلهای ویدئویی، صوتی ،پی دی اف یا هر چیز دیگری را که مد نظرتون هست را از یک سایت دانلود کنید به این صورت عمل کنید:

 wget -r -A.pdf http://url-to-webpage-with-pdfs/

۱۵− دانلود به صورت FTP با wget

wget ftp-url

اگه اف تی پی نیاز به یوزنیم یا پسورد داشت به صورت عمل کنید:

 wget --ftp-user=USERNAME --ftp-password=PASSWORD DOWNLOAD-URL
 

امیدوارم این مطلب به دردتون خورده باشه…

20 دیدگاه در “شگفتی های دستور wget

  1. ممنون دستوراتی کاربردی بود
    اما هنوز متوجه نشدم چطوری میشه از یک سایت میرور درست کرد بصورتی که فقط یک نوع فایل مثلا jpg با حجم بالای ۲۵۰ کیلوبایت ذخیره بشه(!)
    در این بین فایلهای تکراری رو هم دانلود نکنه و…
    و بعدش هم از یک آدرس خاص مثل image.php.com و http://www.php.com دانلود رو بکنه ولی وارد آدرسهای forum.php.com نشه(!)
    (باید یه GUI اختصاصی درست بکنم :دی)
    امکانش هست؟ خسته شدم از بس وارد این فضای مسخره ویندوز شدم و از picaloader استفاده کردم!!!!!!!!!!!!!!

    • برای این کار می تونید از نرم افزار web httrack استفاده کنی.
      برای نمونه من از کل کودکس وردپرس یه کپی گرفتم که ازش استفاده می کنم به صورت آفلاین (چون فیـ.ـلتـ.ـرشده)
      http://www.httrack.com/

      • ممنون ولی این برنامه قابلیت تفکیک قائل نمیشه(!)
        خیلی وقتها تصاویر دو دو یا ده‌ها بار کپی میکنه(!)
        ولی wget اینکارو نمیکنه!

        • نرم‌افزارهای زیادی برای اینکار وجود داره. بهترین گزینه اینه که لیست پیوندها و مشخصاتشون رو با wget داخل یک فایل پایپ کنید و سپس فایل رو با یک اسکریپت پردازش کنید و اونهایی که می‌خواهید دانلود کنید. برنامه‌هایی مثل SiteSucker هم همینکار را می‌کنند.

  2. سلام
    بسیار مفید بود.
    برای انتقال کلیه فایلهای داخل یک پوشه از چه دستوری میشه استفاده کرد؟
    راستی یک سوال ابتدایی دیگه!!
    چطور میشه فایل تکستی که با دستور cat> ایجاد میشه رو بست؟
    مرسی

    • کلید میانبر
      Ctrl+D در سیستم‌های یونیکس و
      Ctrl+Z در سیستم‌های ویندوزی مشخص کننده وضعیت (نه کاراکتر) انتهای فایل (End Of File) هستند. لذا اگر در برنامه ترمینایل هستید که دارید محتویات یک فایل رو مشخص می‌کنید، با این کلید ترکیبی انتهای این رو مشخص می‌کنید.
      البته می‌تونید برای راحتتری از
      :>file
      echo > file
      استفاده کنید.

  3. سلام دوست عزیز

    برای سوال اول:
    http://superuser.com/questions/62141/linux-how-to-move-all-files-from-current-directory-to-upper-directory
    برای سوال دوم:
    http://www.ahinc.com/linux101/textfiles.htm

  4. دقت داشته باشید که در اکثر موارد آدرس یک فایل در اینترنت می‌تونه حاوی کاراکترهایی باشه که استفاده اونها در ترمینال معانی خاصی داره، مثل & و > . بنابراین بهتره کل آدرس داخل کوتیشن قرار بگیره
    wget “address here” -o

  5. سلام
    آموزش جالبی بود خیلی ممنون
    ولی میشه بگین دستورات دیگه ای هم مثل wget وجود دارن که همین کار دانلود رو انجام بدن ؟
    alert(‘thank you :D’)

  6. سلام. ممنون بخاطر این توضیح خوب و عالی در مورد wget.
    یک سوال!
    من میخام مثلا dante.ctan.org/CTAN/systems/texlive/tlnet/ را دانلود کنم.
    اما یک فایل html میده.
    میخام پوشه‌ها و فایل‌های داخلش را مثلا تا ۵ مرحله توش بره و دانلود کنه. ممنون میشم راهنمایی کنید.
    با تشکر

  7. بازپینگ: مثالهای کاربردی دستور cURLPHPDevelopers.ir | PHPDevelopers.ir

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شما می‌توانید از این دستورات HTML استفاده کنید: