কোনও ফাইল থেকে ইনপুট সহ xargs ব্যবহার করা


41

বলুন আমার সাথে নিম্নলিখিত ফাইল রয়েছে

bob
john
sue

এখন এই সরাসরি corrospond যেমন URL প্যাটার্ন (এই ক্ষেত্রে) http://example.com/persons/bob.tar, john.tar, sue.tar

আমি এই লাইনগুলি নিতে এবং এগুলি চালিয়ে যেতে চাই xargs। আমি জানি না যদিও কমান্ডটি কার্যকর করা হচ্ছে তা কী পাস হয়েছে। প্রম্পট থেকে আমি কীভাবে প্যারামিটারটি অ্যাক্সেস করব (বলুন যে আমি প্রতিটি লাইনের মতো প্রতিধ্বনি করতে চাই cat file | xargs echo $PARAM) বা বাশ স্ক্রিপ্ট থেকে।


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

1
@ মিশেল: আপনি যখন xargsএটির মাধ্যমে একটি তালিকা চালান তখন এটি লাইন দ্বারা ভেঙে দেয় এবং প্রতিটি লাইনকে কমান্ডে ফিড করে দেয়, তাই না? আমার যদি এমন কিছু বলার দরকার হয় তবে আমি কীভাবে এটি অ্যাক্সেস করব cat file | xargs curl http://example.com/[PASSED FROM FILE].tar?
জোশ কে

উত্তর:


70

মাইকেল এর উত্তর সঠিক, এবং আপনার সমস্যা সমাধান করা উচিত। চলমান

cat file | xargs -I % curl http://example.com/persons/%.tar

bob.tar john.tar. sue.tarপ্রত্যাশার মতো ফাইলগুলি ডাউনলোড করবে।

বাট : এখানে বিড়াল অকেজো

বরং ব্যবহার করুন:

<file xargs -I % curl http://example.com/persons/%.tar

1
আমার এক ফাইলের উদাহরণে এটি আদর্শ নাও হতে পারে, তবেcat xaa xab xac xad ... xargs ...
জোশ কে

10
@ জোশ কোনও কারণে লোকেরা এখানে বিড়ালের অপ্রয়োজনীয় ব্যবহারগুলি সত্যই গুরুত্ব সহকারে গ্রহণের ঝোঁক দেখায়; আমি এখন দুবার এর জন্য
ডাউনভোট হয়েছি

2
রেকর্ডটির জন্য, আপনি আমার কাছ থেকে একটি +1 পেয়েছেন। আমি মনে করি ব্যবহার catকরা সত্যিই ঠিক আছে, ঠিক আরও তথ্য যুক্ত করার মতো ... :)
স্টেফান

অবশ্যই এটি হওয়া উচিত xargs -I % curl …(এর আগে xargs বিকল্প curlএবং এর অপশন / আর্গুমেন্ট)। খুব কম সময়ে xargs curl -I %(যেখানে xargs এর-I % বিকল্প হিসাবে বোঝানো হয় , কার্ল নয় ) পোর্টেবল নয়।
ক্রিস জনসেন

@ ক্রিস, দুর্দান্ত ক্যাচ, টিএনএক্স স্থির করেছি।
স্টেফান

16

আমি মনে করি আপনি কীভাবে xargsস্ট্যান্ডিন থেকে টানা পৃথক লাইনগুলি একটি কমান্ডের মাঝখানে সন্নিবেশ করানোর জন্য জিজ্ঞাসা করছেন , কেবল সর্বদা এটি সর্বদা পেস্ট করার পরিবর্তে। যদি তা হয়, -Iপতাকাটি একটি replacement-stringআর্গুমেন্ট নেয় ; xargsতারপরে replacement-stringকমান্ডে স্ট্যান্ডিনের পঠিত লাইনটি প্রতিস্থাপন করবে :

$ cat file | xargs -I foobar curl http://example.com/foobar.tar

ঠিক আছে, কেমন curl http://example.com/foobar.tar > foobar.tar?
জোশ কে

2
@ জোশ কে: >একটি শেল নির্মাণ, এবং এটির জন্য কাজ করবে না xargs। অন্যদিকে curl -o, স্ট্যাডআউটের পরিবর্তে কোনও নামকৃত ফাইলে লিখবে, যেমনটি যা wgetকরে, তাই এটি সম্ভবত আপনি এখানে ব্যবহার করতে চান।
প্রথম

9
x ম্যান xargs
...
       --arg ফাইল = ফাইল
       -একটি নথি
              স্ট্যান্ডার্ড ইনপুটের পরিবর্তে ফাইল থেকে আইটেমগুলি পড়ুন। আপনি যদি এটি ব্যবহার করেন
              কমান্ডগুলি চালিত হলে বিকল্পটি, স্টিডিন অপরিবর্তিত থাকে। Other-
              বুদ্ধিমান, স্টিডিনটি / dev / নাল থেকে পুনঃনির্দেশিত হয়।
...

আপনি সেট করতে পারেন --delimiter=/ -dকরতে '\n'হিসাবে ভাল।


অন্যদিকে, আপনি যদি কেবল ফাইলের প্রতিটি লাইনকে একটি ইউআরএল রূপান্তর করার চেষ্টা করছেন,

$ সেড -এর '#। * # http: //example.com/persons/&.tar#' ফাইল

করবে, এবং আপনি যদি তাদের সমস্তগুলি আনতে চান তবে কেবল এটিতে পাইপ দিন ।| wget -i


8

শেল লুপিংয়ের সাথে অন্য একটি উপায়:

for i in `cat file`; do curl -I http://foo.com/$i; done

আপনি &সর্বশেষ সেমিকোলনের পূর্বে যোগ করে পটভূমিতে প্রতিটি পুনরাবৃত্তি চালাতে পারেন - খুব বড় ডাউনলোডের জন্য এটি কার্যকর হতে পারে


2
আপনি এক ক্লাসিক ভুলের জন্য পড়ে গিয়েছেন ! <- ভাঙা লিঙ্ক, এখানে একটি ক্যাশেড সংস্করণ: ক্যাট পুরষ্কারের অকার্যকর ব্যবহার
Sorpigal

পছন্দ করুন 'ক্লাসিক ভুল' কী?
স্টারবিয়াম্রেনবোলাব

@ স্টারবিআমরিনবোলাবস - বিড়ালের অকেজো ব্যবহার, আমি উপরের মন্তব্যে সেই লিঙ্কটির একটি ক্যাশেড সংস্করণ রেখেছি।
slm

@ স্টারবিআমরিনবোলাবস: আমি বিশেষত বিপজ্জনক ব্যাকটিক্সের সাথে সংযুক্ত ছিলাম , তবে আপনি যদি কিছুটা নির্মাণের ক্ষেত্রে পরিবর্তন করেন তবে বিড়ালের ব্যবহারও অপ্রয়োজনীয়:while IFS= read i ; do curl ... ; done < file
সর্পিগাল

3

জিএনইউ সমান্তরাল দিয়ে আপনি এটি করতে পারেন:

cat urls | parallel curl {} ">" {/}

বা:

cat persons | parallel curl http://example.com/persons/{}.tar ">" {}.tar

আরও জানতে জিএনইউ সমান্তরালের জন্য অন্তর্ভুক্ত ভিডিওটি দেখুন: http://www.youtube.com/watch?v=OpaiGYxkSuQ


1

while read VAR; do ... done লুপটি সহজ তবে খুব বহুমুখী:

while read word; do wget http://example.com/persons/$word; done < file

0

এটি স্টেফান: এর উত্তরের আরও সাধারণ সংস্করণ, তবে আমি ঠিক "স্ট্রিং" প্রস্তুত করতে মাঝখানে বিশ্রী ব্যবহার করছি যা আমি এক্সারগেসকে সম্পাদন করতে চাই। এবং তারপরে xargs প্রকৃত "কাজ" করতে ব্যাশ ব্যবহার করছে।

এই উদাহরণের জন্য এটি সামান্য পরিমাণে ওভারকিল, তবে এটি একটি সাধারণ সমাধান যা কিছু সংশোধন করে অনেক সমস্যার সমাধান করতে পারে ...

cat file | awk '{print "curl http://example.com/persons/"$1".tar"}' | xargs -0 bash -c
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.