ক্যোরি স্ট্রিংটি অন্তর্ভুক্ত না করার জন্য আমি ডাউনলোডের ফাইলগুলি কীভাবে উইজেটের নাম পরিবর্তন করতে পারি?


32

আমি উইজেট সহ একটি সাইট ডাউনলোড করছি এবং প্রচুর লিঙ্কগুলিতে অনেকগুলি কোয়েরি যুক্ত রয়েছে, তাই যখন আমি এটি করি:

wget -nv -c -r -H -A mp3 -nd http://url.to.old.podcasts.com/

আমি এই জাতীয় অনেক ফাইল দিয়ে শেষ করছি:

1.mp3?foo=bar
2.mp3?blatz=pow
3.mp3?fizz=buzz

আমি যা শেষ করতে চাই তা হ'ল:

1.mp3
2.mp3
3.mp3

এটি সব উবুন্টু লিনাক্সে চলছে এবং আমি উইজেট পেয়েছি 1.10.2।

আমি জানি যে আমি সমস্ত কিছু নতুন করে দেওয়ার জন্য স্ক্রিপ্টের মাধ্যমে সবকিছু পাওয়ার পরে আমি এটি করতে পারি। তবে আমি সত্যিই উইজেটের মধ্যে থেকেই একটি সমাধান চাই যাতে ডাউনলোডগুলি হ'ল সঠিক নামগুলি দেখতে পাচ্ছি।

কেউ কি আমাকে এটি উন্মোচন করতে সহায়তা করতে পারে?


আপনার প্রশ্নটি www.stackoverflow.com এ পোস্ট করুন।
ডেনিজ জোয়েটম্যান

3
@ টিউটোরিয়ালপয়েন্ট কেন? প্রশ্নটি এর মধ্যে-যা-করতে-করতে-করার চেষ্টা করছে, এসও কেবল এটিকে এখানে ফিরিয়ে আনবে।
কোয়াকোট কোয়েক্সোট

আচ্ছা, এটি করার মতো কোনও উপায় নেই
আয়রনিউ

1
@ ইয়ার্নিউ: এক আদেশে নয়, নেই। এবং সাহায্যকারী ছাড়া না। তবে আপনি অবশ্যই এটি n + 1 wgetকমান্ডের সাথে কম (যদি কম না হয়) দিয়ে করতে পারেন।
কোয়াকোট কোয়েসোট

উত্তর:


24

যদি সার্ভারটি দয়াবান হয় তবে এটি আপনার ক্লায়েন্টকে সঠিক ফাইলনামের পরামর্শ দেওয়ার জন্য ডাউনলোডের মধ্যে একটি বিষয়বস্তু-বিশৃঙ্খলা শিরোনামটি স্টিক করা হতে পারে। চূড়ান্ত ফাইল নামটির জন্য সেই শিরোনামটি শোনার জন্য উইজেটকে বলা যতটা সহজ:

wget --content-disposition

এই বৈশিষ্ট্যটি ব্যবহার করার জন্য আপনার উইজেটের একটি নতুন সংস্করণ প্রয়োজন।

'/ ইত্যাদি / পাসডাব্লু' ফাইলের একটি ফাইল দাবি করে এমন কোনও সার্ভার এটি কতটা পরিচালনা করে তা আমার কোনও ধারণা নেই।


এই উত্তরটি নিয়ে আমার কোনও সমস্যা নেই, কারণ এটি কোনও পরিস্থিতিতে কোনও সন্দেহ নেই। দুর্ভাগ্যক্রমে, কিছু ক্লাউডফ্রন্ট- সংরক্ষিত পৃষ্ঠাগুলিতে ?v=blahটাইপ ভার্সন সহ এটি আমার পক্ষে কাজ করে নি । এগুলি ব্যতীত কোনও ডকুমেন্টের জন্য অনুরোধ করার জন্য কিছু ক্লাউডফ্রন্ট-নির্দিষ্ট উপায় থাকতে পারে, আমি জানি না, তবে আমি একটি খুঁজে পেতে ব্যর্থ হয়েছি, সুতরাং এই জাতীয় ক্ষেত্রে অন্য উত্তরগুলির মতো কিছু ভাল প্রয়োজন হতে পারে। (যদি কেউ স্ট্রিপ নেওয়ার কোনও উপায় সম্পর্কে জানতে পারে - বা ক্লাউডফ্রন্টটি সেবার জন্য না দেওয়া - v=স্ট্রিংগুলি সম্পর্কে আমি শুনতে খুব পছন্দ করব))
লিন্ডেস

17

আমি একটি বড় ব্যাচ প্রক্রিয়া করার পরে বুঝতে পেরেছিলাম যে আমার উচিত ছিল যে wgetক্যোয়ারী স্ট্রিংগুলি উপেক্ষা করার নির্দেশ দেওয়া উচিত । আমি আবার এটি করতে চাইনি তাই আমি এই স্ক্রিপ্টটি তৈরি করেছিলাম যা আমার পক্ষে কাজ করেছে:

# /bin/bash
for i in `find $1 -type f`
do
    mv $i `echo $i | cut -d? -f1`
done

রাখুন যে মত একটি ফাইলে rmqstrএবং chmod +x rmqstr শব্দবিন্যাস:./rmqstr <directory (defaults to .)>

এটি পুনরাবৃত্তভাবে সমস্ত ফাইলের নাম থেকে ক্যোয়ারী স্ট্রিংগুলি সরিয়ে ফেলবে।


2
আমি কেবলমাত্র প্রয়োজনীয় ফাইলগুলিতে সীমাবদ্ধ করার জন্য অংশটি খুঁজতে `-name" \? " Add যুক্ত করব :)
আরকাদিউস 'উড়ে' রাজ্জাকোউলস্কি

4

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

তবে আসলেই এর উত্তর। এক wgetকমান্ডে এটি করার চেষ্টা করার পরিবর্তে একাধিক কমান্ড ব্যবহার করুন। এখন আপনার কর্মপ্রবাহ হয়ে যায়:

  1. চালান wgetবেস HTML ফাইল (গুলি) পেতে আপনার লিঙ্ক ধারণকারী;
  2. ইউআরএল জন্য পার্স;
  3. পূর্বাভাস URL শেষ হচ্ছে mp3,
    1. URL টি প্রক্রিয়া একটি ফাইল পেতে (যেমন চালু http://foo/bar/baz.mp3?gargle=blasterমধ্যেbaz.mp3
    2. (alচ্ছিক) পরীক্ষা করে দেখুন যে ফাইলের নামটি নেই
    3. চালান wget <URL> -O <filename>

এটি আপনার সমস্যার সমাধান করে তবে এখন আপনার mp3ইউআরএলগুলি খুঁজে পেতে কীভাবে বেস ফাইলগুলি দখল করতে হয় তা নির্ধারণ করা দরকার ।

আপনার মনে কি কোনও নির্দিষ্ট সাইট / বেস ইউআরএল আছে? 1 এবং 3 পদক্ষেপগুলি একটি কংক্রিট উদাহরণ সহ পরিচালনা করা সহজ হবে।


1

সুতরাং ডাউনলোডটি হ'ল সঠিক নামগুলি আমি দেখতে পাচ্ছি।

ঠিক আছে. আপনি সাধারণত উইজেট ব্যবহার করুন; আপনি সাধারণত ব্যবহার করেন এমন পোস্ট-উইজেট স্ক্রিপ্টটি ব্যবহার করুন তবে উইজেটের আউটপুট প্রক্রিয়া করুন যাতে এটি চোখের কাছে আরও সহজ হয়:

#! /bin/sh
exec wget --progress=bar:force $* 2>&1 | \
  perl -pe 'BEGIN { $| = 1 } s,(?<=`)([^\x27?]+),\e[36;1m$1\e[0m, if /^Saving/'
cgi-cut # rename files

এটি ?foo=barআপনার ডাউনলোডের মতো এখনও দেখাবে , তবে বাকি নামটি উজ্জ্বল সায়ানে প্রদর্শিত হবে।


এটি কিছুটা ফাইলের নামগুলি প্রদর্শিত হওয়ার সমস্যাটি সমাধান করে তবে ওপি চূড়ান্ত ফাইলের নামটিও চায় যে ক্যোরি স্ট্রিং না থাকে।
মাইকেল মায়ার

1

@ গ্রেগরি ওল্ফের মতো আমারও একই রকম দৃষ্টিভঙ্গি রয়েছে কারণ তার কোডটি সর্বদা এ জাতীয় ত্রুটি বার্তা তৈরি করে:

এমভি: './file' এবং './file' একই ফাইল

সুতরাং আমি প্রথমে পরীক্ষা করে দেখি যে ফাইলটি সরানোর আগে ফাইলনেমে কোনও ক্যোরি স্ট্রিং রয়েছে:

for f in $(find $1 -type f); do
    if [ $f = ${f%%\?*} ]; then continue; fi
    mv "${f}" "${f%%\?*}"
done

এটি প্রতিটি ফাইল পুনরাবৃত্তভাবে চেক করে এবং যদি পাওয়া যায় তবে তাদের ফাইলের নামগুলিতে সমস্ত ক্যোয়ারী স্ট্রিংগুলি সরিয়ে ফেলবে।


0

সাইটটি ক্লোন করার জন্য আমি তৈরি করা এই দুটি কমান্ড দেখুন এবং ক্লোনটি শেষ হওয়ার পরে আপনি দ্বিতীয় কমান্ড কার্যকর করতে পারেন।

দ্বিতীয় কমান্ড পুরো ক্লোনটি একবার দেখে নেবে, " ? " ফাইলের ধরণের নাম অনুসন্ধান করবে এবং ফাইলের নাম থেকে ক্যোয়ারী স্ট্রিং সরিয়ে ফেলবে।

# Clone entire site.
    wget --content-disposition --execute robots=off --recursive --no-parent --continue --no-clobber http://example.com

# Remove query string from a static resource.
for i in `find $1 -type f -name "*\?*"`; do mv $i `echo $i | cut -d? -f1`; done

(এটি গিটহাব গিস্টে দেখুন ))


-2

আরও সহজ এটি: /unix/196253/how-do-you-rename-files-specifically-in-a-list-that-wget-will-use

এটি এমন একটি পদ্ধতি প্রস্তাব করে যা একাধিক ফাইলের জন্য মূলত উইজেটের পুনরায় নামকরণ ফাংশন (ডিরেক্টরি অন্তর্ভুক্ত করতে পরিবর্তিত হতে পারে) ব্যবহার করে। প্রস্তাবিত দ্বিতীয় সংস্করণটি দেখুন।


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