xargs বিশেষত দরকারী যখন স্ট্যান্ডিনে আপনার ফাইলপথগুলির একটি তালিকা থাকে এবং তাদের সাথে কিছু করতে চান। উদাহরণ স্বরূপ:
$ git ls-files "*.tex" | xargs -n 1 sed -i "s/color/colour/g"
আসুন এই ধাপে ধাপে পরীক্ষা:
$ git ls-files "*.tex"
tex/ch1/intro.tex
tex/ch1/motivation.tex
....
অন্য কথায়, আমাদের ইনপুটটি সেই পথগুলির একটি তালিকা যা আমরা কিছু করতে চাই।
এই পাথগুলির সাথে xargs কী করে তা সন্ধান করার জন্য echo
আপনার কমান্ডের আগে একটি দুর্দান্ত কৌশলটি যুক্ত করা যেমন :
$ git ls-files "*.tex" | xargs -n 1 echo sed -i "s/color/colour/g"
sed -i "s/color/colour/g" tex/ch1/intro.tex
sed -i "s/color/colour/g" tex/ch1/motivation.tex
....
-n 1
যুক্তি xargs তার নিজস্ব একটি কমান্ড প্রতিটি লাইন চালু করতে হবে। sed -i "s/color/colour/g"
কমান্ডের সব ঘটনার প্রতিস্থাপন করবে color
সঙ্গে colour
নির্বাচিত ফাইল জন্য।
মনে রাখবেন যে আপনার পথগুলিতে কোনও স্থান না থাকলে এটি কেবলমাত্র কাজ করে। যদি আপনি এটি করেন তবে আপনার -0
পতাকাটি পেরিয়ে জার্সগুলিতে ইনপুট হিসাবে নাল টার্মিনেটেড পাথগুলি ব্যবহার করা উচিত । একটি উদাহরণ ব্যবহার হবে:
$ git ls-files -z "*.tex" | xargs -0 -n 1 sed -i "s/color/colour/g"
যা আমরা উপরে বর্ণিত হিসাবে একইভাবে কাজ করে, তবে কোনও একটিতে যদি এর মধ্যে ফাঁকা স্থান থাকে তবে তা কাজ করে।
এই যে কোনো কমান্ড যে যেমন আউটপুট ফাইলের নামের উৎপন্ন সাথে কাজ করে find
বা locate
। যদি আপনি এটি প্রচুর ফাইল সহ গিট রিপোজিটরিতে ব্যবহার করতে পারেন তবে এর git grep -l
পরিবর্তে এটি ব্যবহার করা আরও দক্ষ হতে পারে git ls-files
:
$ git grep -l "color" "*.tex" | xargs -n 1 sed -i "s/color/colour/g"
git grep -l "color" "*.tex"
কমান্ড "* .tex" শব্দগুচ্ছ "রং" ধারণকারী ফাইলগুলির একটি তালিকা দিতে হবে।
xargs
এবং$(...)
) স্ট্রিম পাওয়ার জন্য দুটি সাধারণ বিকল্পের মধ্যে xargs কমান্ড প্রতিস্থাপনের চেয়ে অনেক বেশি নিরাপদ। এবং আমি এটির মধ্যে একটি নতুন লাইন সহ কোনও বৈধ ফাইল নাম জুড়ে আসা কখনই স্মরণ করতে পারি না। কমান্ড প্রতিস্থাপনের সাথে পালিয়ে যাওয়া এবং শব্দের সম্প্রসারণের সমস্যাগুলি কী জার্সস নয়?