ইউআরএল এবং তাদের সম্পর্কিত আউটপুট ফাইলগুলির তালিকা সহ আমি কীভাবে উইজেট ব্যবহার করব?


35

ধরা যাক এর list_of_urlsমতো দেখতে:

http://www.url1.com/some.txt
http://www.url2.com/video.mp4

আমি জানি যে এটির সাথে কীভাবে ব্যবহার করতে হয়:

wget -i list_of_urls

তবে, আমার যদি list_of_urlsএটি থাকে এবং তারা সকলে পিডিএফ বা ভিডিওগুলির মতো যথাযথ ফাইলগুলি ফেরত দেয়:

http://www.url1.com/app?q=123&gibb=erish&gar=ble
http://www.url2.com/app?q=111&wha=tcha&mac=allit

একটি একক ফাইলের জন্য আমি এটি করতে পারি:

wget -O some.txt "http://www.url1.com/app?q=123&gibb=erish&gar=ble"

আমি কীভাবে wgetইউআরএলগুলির তালিকাটি ডাউনলোড করতে এবং ফিরিয়ে নেওয়া ডেটা সঠিক লোকাল ফাইলে সংরক্ষণ করতে ব্যবহার করব ?

উত্তর:


33

ডিফল্টরূপে, উইজেট এমন কোনও ফাইলে লিখেন যার নাম আপনি যে URL টি দিয়েছিলেন তার শেষ উপাদান। অনেক সার্ভার ইউআরএলগুলিকে http://www.url1.com/app?q=123&gibb=erish&gar=bleআলাদা আলাদা ইউআরএল পছন্দমতো ফাইল নামের মত পুনর্নির্দেশ করে http://download.url1.com/files/something.pdf। আপনি বিকল্পটি পাস করার something.pdfপরিবর্তে পুনঃনির্দেশিত ইউআরএল (ie ) থেকে নামটি ব্যবহার করতে উইজেটকে বলতে পারেন । এটি ডিফল্ট মোড নয় কারণ, যদি অযত্নে ব্যবহার করা হয় তবে এটি বর্তমান ডিরেক্টরিতে একটি অপ্রত্যাশিত ফাইলের নামটি ওভাররাইট করতে পারে; তবে আপনি যদি সার্ভারকে বিশ্বাস করেন বা কোনও মূল্যবান ফাইল নেই এমন কোনও ডিরেক্টরিতে কাজ করছেন তবে সাধারণত সঠিকভাবে ব্যবহৃত জিনিস।app?q=123&gibb=erish&gar=ble--trust-server-names--trust-server-names

কিছু সার্ভার Content-Dispositionকোনও ফাইলের নাম নির্দিষ্ট করতে পুনর্নির্দেশের পরিবর্তে একটি শিরোলেখ ব্যবহার করে । --content-dispositionএই ফাইলটির নাম ব্যবহার করে উইজেট তৈরি করতে বিকল্পটি পাস করুন ।

এভাবে:

wget --content-disposition --trust-server-names -i list_of_urls

আপনি যদি এখনও সুদর্শন ফাইলের নাম না পেয়ে থাকেন তবে আপনি নিজের নিজস্ব উল্লেখ করতে চাইতে পারেন। মনে করুন আপনার কাছে লাইনের মতো একটি ফাইল রয়েছে

http://www.url1.com/app?q=123&gibb=erish&gar=ble foo.pdf
http://www.url2.com/app?q=111&wha=tcha&mac=allit bar.txt

উইজেটটি নির্দিষ্ট ফাইলের নামগুলিতে ফাইলগুলি ডাউনলোড করতে, ধরে নিই যে URL বা ফাইলের নামগুলিতে কোনও শ্বেত স্পেস অক্ষর নেই:

err=0
while read -r url filename tail; do
  wget -O "$filename" "$url" || err=1
done <list_of_urls_and_file_names

errযদি সকল ডাউনলোড সফল এবং 1 অন্যথায়, আপনি পারেন পরিবর্তনশীল 0 রয়েছে return $errযদি এই স্নিপেট একটি ফাংশন রাখা বা exit $errআপনি একটি স্ট্রিং এই স্নিপেট করা।

আপনি যদি ইউআরএল ব্যতীত অন্য কিছু নির্দিষ্ট করতে না চান এবং আপনি সার্ভার থেকে ভাল নাম পেতে না পারেন তবে আপনি ফাইলের ধরণটি অনুমান করতে পারেন এবং কমপক্ষে অর্থবহ এক্সটেনশনগুলি পাওয়ার চেষ্টা করতে পারেন।

err=0
n=1
while read -r url; do
  if wget -O tmpfile "$url"; then
    ext=data
    case $(file -i tmpfile) in
      application/pdf) ext=pdf;;
      image/jpeg) ext=jpg;;
      text/html) ext=html;;
      text/*) ext=txt;;
    esac
    mv tmpfile "$n.$ext"
  else
    err=1
  fi
  n=$((n+1))
done

পছন্দসইভাবে অন্যান্য প্রকারগুলি যুক্ত করুন। যদি আপনার fileকমান্ডের -mবিকল্প না থাকে তবে এটিকে ছেড়ে দিন এবং fileআপনার সিস্টেমে যে ফাইল ফাইলগুলি আগ্রহী সেগুলির জন্য আপনার সিস্টেমে কী ফিরে আসে তা পরীক্ষা করুন /etc/mime.typesyou এটি আপনার নিজের তালিকা সরবরাহ করার পরিবর্তে:

n=1
while read -r url; do
  if wget -O tmpfile "$url"; then
    mime_type=$(file -m tmpfile)
    ext=$(awk "$1 == \"$mime_type\" {print \$2; exit} END {print \"data\"}" /etc/mime.types)
    mv tmpfile "$n.$ext"
  else
    err=1
  fi
  n=$((n+1))
done

2

আপনি আপনার এন্ট্রি লুপ করতে পারে list_of_urls। এটার মতো কিছু:

while read -r url; do
    wget -O foo $url
done < list_of_urls

মনে রাখবেন যে fooপ্রতিটি প্রবেশের জন্য আপনাকে নিজের পদ্ধতি নির্ধারণ করতে হবে list_of_urls(এছাড়াও, আমি এটি ডিস্কের মধ্যে একটি ফাইল বলে ধরে নিচ্ছি)।


এখানে তারতম্য রয়েছে: একটি লাইন দিয়ে একটি ছোট স্ক্রিপ্ট তৈরি করুন wget -O $2 $1। List_of_urls ফাইলের মধ্যে, প্রতিটি লাইনে একটি URL, হোয়াইটস্পেস, একটি ফাইলের নাম (যেমন করা http://url1/blah&blah=whatever some.pdf, সঙ্গে wget হয় লাইন প্রতিস্থাপন তারপর উপরে হিসাবে একই ব্যবহার করুন। ./thatscript.sh $urlএই ক্ষেত্রে। $urlআসলে একটি URL এবং অবশ্যই একটি ফাইলের নাম, সঙ্গে একটি লাইন।
স্বর্ণকেশ

2
ভিন্নতা 2: ইউআরএল এবং ফাইলের নামগুলি তালিকাভুক্ত_ল_আরলস ফাইলটিতে পৃথক, বিকল্প রেখায় রাখুন, তারপরে ব্যবহার করুন while read url; do read filename; wget -O $filename $url; done < list_of_urls
স্বর্ণলোক

2

আপনি সরাসরি wgetবিকল্প ব্যবহার করতে পারেন :

wget -r -i list_of_urls

এটি কাজ করে না: -rপুনরাবৃত্ত ডাউনলোডগুলি সক্ষম করে। ফাইলের নামগুলি সঠিকভাবে সেট করা নেই।
jofel
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.