আমি কী উইজেটের সদৃশ তৈরি করা বন্ধ করতে পারি?


13

আমি যদি দুবার উইজেট চালাই তবে এটি সনাক্ত করে না যে এটি ইতিমধ্যে সেই ফাইলটি ডাউনলোড করেছে এবং একটি নতুন তৈরি করে। এটিকে আবার ফাইল ডাউনলোড করতে বাধা দেওয়ার কোনও উপায় আছে কি?

$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...

$ wget https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png.1’
...

(উইজেট এটি করতে না পারলে কার্ল বা অনুরূপ স্ক্রিপ্টযোগ্য বিকল্প ব্যবহার করে খুশি Happy)


9
ঠিক আছে কারণ এটি একটি নতুন তৈরি করে কারণ এটি ফাইলটিকে চিনতে পারে!
নিকো

উত্তর:


17

আমি আপনাকে -Nবিকল্পটি ব্যবহার করার পরামর্শ দিচ্ছি ।

-N
--timestamping
    Turn on time-stamping.

এটি টাইম-স্ট্যাম্পিং সক্ষম করে, যা ডাউনলোড সংস্করণটির চেয়ে সার্ভারে নতুনভাবে ফাইলটি পুনরায় ডাউনলোড করে।

$ wget -N https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...

$ wget -N https://cdn.sstatic.net/askubuntu/img/logo.png
...
Server file no newer than local file ‘logo.png’ -- not retrieving.

সতর্কীকরণ (KasiyA এর মন্তব্য থেকে)

যদি সার্ভারটি সঠিকভাবে কনফিগার করা না থাকে তবে এটি সর্বদা জানাতে পারে যে ফাইলটি নতুন এবং -Nসর্বদা ফাইলটি পুনরায় ডাউনলোড করবে। এই ক্ষেত্রে, -ncসম্ভবত একটি ভাল বিকল্প।


3
যখন কোনও সার্ভার সঠিকভাবে কনফিগার করা হয়নি তখন -Nব্যর্থ হতে পারে এবং উইজেটটি সর্বদা পুনরায় ডাউনলোড হবে। তাই কখনও কখনও এর -ncচেয়ে ভাল হয়-N
13-15

1
@ ক্যাসি আপনার মন্তব্যের জন্য ধন্যবাদ, মনে হচ্ছে সব ক্ষেত্রেই ভাল বিকল্প নেই।
জোফেল

16

হ্যাঁ এটি -cবিকল্প।

--continue
    Continue getting a partially-downloaded file.  This is useful when you want to
    finish up a download started by a previous instance of Wget, or by another
    program.

যদি ফাইলটি একই হয় তবে দ্বিতীয় ডাউনলোডের প্রচেষ্টা বন্ধ হয়ে যাবে।

$ wget -c https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...

$ wget -c https://cdn.sstatic.net/askubuntu/img/logo.png
...
The file is already fully retrieved; nothing to do.

আদেশ সহকারে (jofel মন্তব্য থেকে)

যদি ফাইলটি সার্ভারে পরিবর্তিত হয় তবে -cবিকল্পটি ভুল ফলাফল দিতে পারে।

এর সাথে -c, উইজেট কেবলমাত্র সার্ভারকে ইতিমধ্যে ডাউনলোড করা ফাইলের অংশের বাইরে অন্য কোনও ডেটার জন্য জিজ্ঞাসা করে, অন্য কিছুই নয়। এটি ইতিমধ্যে ডাউনলোড করা ফাইলের অংশে কোনও পরিবর্তন হয়েছে কিনা তা পরীক্ষা করে না। সুতরাং, আপনি একটি দূষিত ফাইল যা পুরানো এবং নতুন ফাইলের মিশ্রণ হতে পারে।


স্থানীয় পরীক্ষা

সাধারণ স্থানীয় ওয়েব-সার্ভারটি নিম্নলিখিত হিসাবে চালিয়ে আপনি এটি পরীক্ষা করতে পারেন ( @ রোডমর এর উত্তরের জন্য ধন্যবাদ ):

একটি টার্মিনাল উইন্ডো খুলুন এবং টাইপ করুন:

cd /path/to/parent-download-dir/
python -m SimpleHTTPServer

এখন অন্য একটি টার্মিনাল খুলুন এবং করুন:

wget -c http://localhost:8000/filename-to-download

দ্রষ্টব্য এটি filename-to-downloadসেই ফাইলটি /path/to/parent-download-dir/যেখানে আমরা এটি ডাউনলোড করতে চাইছি।

এখন আপনি যদি একাধিকবার জন্য উইজেট কমান্ড চালান তবে আপনি দেখতে পাবেন:

The file is already fully retrieved; nothing to do.

ঠিক আছে, এখন /path/to/parent-download-dir/ডিরেক্টরিতে যান এবং উত্স ফাইলে কিছু যুক্ত করুন, উদাহরণস্বরূপ যদি এটি কোনও পাঠ্য ফাইল হয় তবে এটিতে একটি সাধারণ অতিরিক্ত লাইন যুক্ত করুন এবং ফাইলটি সংরক্ষণ করুন। এখন দিয়ে চেষ্টা করুন wget -c ...। দুর্দান্ত, এখন আপনি ফাইলটি আবার ডাউনলোডগুলি দেখতে পাবেন তবে আপনি এটি ইতিমধ্যে ডাউনলোড করে ফেলেছেন।

কারণ: পুনরায় ডাউনলোড কেন?

কারণ এর আকার পুরানো ডাউনলোড করা ফাইলের চেয়ে আরও বড় আকারে পরিবর্তিত হয়েছে এবং অন্য কিছুই নয়।


1
ডাউনলোডগুলির মধ্যে সার্ভারে ফাইলটি পরিবর্তিত হয়ে থাকলে এটি সঠিকভাবে কাজ করে না। সবচেয়ে খারাপ ক্ষেত্রে (ফাইলের আকার বেড়েছে), আপনি একটি কলুষিত ফাইল পান।
জোফেল

1
@ জোফেল হ্যাঁ -ncআপনি যা বলেছেন ঠিক তেমন করে না তবে -cবিকল্পটি কাজ করবে এবং সে কারণেই আমি -cপ্রথমে বিকল্পটি উল্লেখ করেছি ।
нιηসнιη

সঙ্গে -c, wgetইতিমধ্যে ডাউনলোড করা ফাইল অংশ পরলোক কোন ডেটার জন্য সার্ভার, অন্য কিছুই অনুরোধ। ইতিমধ্যে সার্ভারে ফাইলের ইতিমধ্যে ডাউনলোড করা অংশে কোনও পরিবর্তন হয়েছে কিনা তা পরীক্ষা করে না। সবচেয়ে খারাপ সময়ে আপনি একটি দূষিত ফাইল পান যা পুরানো এবং নতুন ফাইলের মধ্যে একটি মিশ্রণ।
জোফেল

বিকল্পগুলি পর্যালোচনা করার পরে আমি মনে করি এটি কেবল লগ ফাইলের মতো (বর্ধিত বর্ধিত আপডেটগুলি) এর জন্য দরকারী, অন্য সমস্ত ক্ষেত্রে আমি মনে করি -N বা -nc পুরো ফাইলগুলির সাথে ডিল করার কারণে আরও উপযুক্ত
ডেভিড.লিব্রেমন

3

-ncউইজেটিংয়ের জন্য আরও একটি বিকল্প রয়েছে:

--no-clobber
   If a file is downloaded more than once in the same directory, Wget's behavior
   depends on a few options, including -nc.  In certain cases, the local file will
   be clobbered, or overwritten, upon repeated download.  In other cases it will be
   preserved.

যখন -ncঅপশন উল্লেখিত থাকে, নয় Wget- একই ফাইল কপি ডাউনলোড করতে প্রত্যাখ্যান করবে। আপনার যদি একই ফাইলটি wgetডাউনলোড করার চেষ্টা করে তবে আপনি যদি স্থানীয় ফাইলটির নাম পরিবর্তন না করেন বা সরিয়ে না দেন তবে এটি ডাউনলোড করতে অস্বীকার করবে।

$ wget -nc https://cdn.sstatic.net/askubuntu/img/logo.png
...
Saving to: ‘logo.png’
...

$ wget -nc https://cdn.sstatic.net/askubuntu/img/logo.png
File ‘logo.png’ already there; not retrieving.

কখনও কখনও এই বিকল্পটি দৃ strongly়রূপে ভাল হয় এবং আমি -ncউভয় -cবা -Nবিকল্পের পরিবর্তে বিকল্পটি ব্যবহার করার পরামর্শ দিয়েছিলাম কারণ এই বিকল্পগুলি যদি তাদের একই নাম থাকে তবে আপনার স্থানীয় ফাইলের সাথে ডাউনলোড-ফাইলটি ওভাররাইট করবে ।

সতর্কীকরণ (jofel এর মন্তব্য থেকে)

-ncবিকল্প যদি এটা সার্ভারে পরিবর্তন করা হয়েছে ফাইল আপডেট করা হয় না। যদি আপনি জানেন যে ফাইলটি পরিবর্তন হবে তবে -Nবিকল্পটি পছন্দনীয়। যদি আপনি জানেন যে ফাইলটি পরিবর্তন হবে না (বা আপনি যত্ন -ncনিচ্ছেন না) তবে ঠিক আছে।


1

আমি জানি এটি উইজেট সম্পর্কিত একটি সুনির্দিষ্ট প্রশ্ন ছিল তবে ওপিতে "কার্ল ব্যবহারের জন্য খুশি বা অনুরূপ স্ক্রিপ্টযোগ্য বিকল্প উল্লেখ করা হয়েছে যদি উইজেট এটি করতে না পারে তবে"। আমি নিশ্চিত নই যে এখানে প্রয়োজনীয়তাটি কী (একাধিক ফাইল, পুরানো সংস্করণটি মূল থেকে আলাদা হলে সদ্য ডাউনলোড করা সংস্করণ দিয়ে প্রতিস্থাপন করুন)। আপনি কী চান এবং ডুপ্লিকেটগুলি কীভাবে পরিচালনা করতে চান তার উপর নির্ভর করে আপনার এর চেয়ে আরও বেশি প্রয়োজন হতে পারে you যা আপনি চান বলে মনে করছেন তা করার একটি খুব সহজ উপায় কেবল পরিবর্তে কার্ল ব্যবহার করা।

curl http://cdn.sstatic.net/askubuntu/img/logo.png?v=ca4d192163aa > logo.png

এই কমান্ডটি পুরানো ফাইলটি প্রতিবার নতুন ডাউনলোড করা ফাইলের সাথে প্রতিস্থাপন করবে।

আপনি যদি টেক্সটের বিপরীতে কোনও বাইনারি ফাইল ডাউনলোড করেন তবে এটি টার্মিনালে আউটপুট করবেন না ("> [ফাইল নাম]" ব্যতীত)। এটি করা আপনার টার্মিনাল সেশনটির সাথে বিশৃঙ্খলা সৃষ্টি করতে পারে। আপনি যদি দুর্ঘটনার ক্ষেত্রে এটি করেন তবে আপনাকে অন্য শেল / টার্মিনাল সেশনটি খুলতে হতে পারে।


যদি আপনার টার্মিনালটি খারাপ অবস্থায় থাকে কারণ আপনি বাইনারি ফাইলগুলি প্রদর্শন করেছেন, তবে নতুন টার্মিনালটি খোলার চেয়ে প্রোগ্রামটিকে "রিসেট" বলা আরও সহজ।
জোফেল

আপনি ঠিক বলেছেন যে আমি আমার প্রয়োজনীয়তাগুলি সম্পর্কে পরিষ্কার ছিলাম না, খুশির ফলাফলটি হ'ল আমি আরও কয়েকটি বিকল্প সম্পর্কে শিখেছি :) ধন্যবাদ
ডেভিড.লিব্রেমন

ধন্যবাদ @ জোফেল "" রিসেট "সম্পর্কে জানতেন না আমি যখনই ঘটে তখন আমি সর্বদা একটি নতুন ট্যাব খুলে ফেলা বন্ধ করে দিয়েছি ... যদিও আমি সত্যিই এটি প্রায়শই ঘটিনি।
গব্লিনলর্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.