প্রথমত, ফাইল তালিকা হিসাবে আউটপুট ব্যবহার করবেন নাls
। শেল প্রসার বা ব্যবহার করুন find
। Ls + xargs অপব্যবহারের সম্ভাব্য পরিণতি এবং সঠিক xargs
ব্যবহারের উদাহরণের জন্য নীচে দেখুন ।
1. সহজ উপায়: লুপ জন্য
আপনি যদি কেবল অধীনে থাকা ফাইলগুলি প্রক্রিয়া করতে চান A/
তবে একটি সাধারণ for
লুপ যথেষ্ট হওয়া উচিত:
for file in A/*.dat; do ./a.out < "$file" > "${file%.dat}.ans"; done
2. প্রাক 1 কেন না ls | xargs
?
আপনি যদি কাজের ls
সাথে xargs
এটি ব্যবহার করেন তবে কীভাবে খারাপ জিনিসগুলি ঘুরে আসতে পারে তার একটি উদাহরণ এখানে । নিম্নলিখিত পরিস্থিতিতে বিবেচনা করুন:
প্রথমে কিছু খালি ফাইল তৈরি করা যাক:
$ touch A/mypreciousfile.dat\ with\ junk\ at\ the\ end.dat
$ touch A/mypreciousfile.dat
$ touch A/mypreciousfile.dat.ans
ফাইলগুলি দেখুন এবং সেগুলিতে কিছুই নেই:
$ ls -1 A/
mypreciousfile.dat
mypreciousfile.dat with junk at the end.dat
mypreciousfile.dat.ans
$ cat A/*
ব্যবহার করে একটি যাদু কমান্ড চালান xargs
:
$ ls A/*.dat | xargs -I file sh -c "echo TRICKED > file.ans"
ফলাফল:
$ cat A/mypreciousfile.dat
TRICKED with junk at the end.dat.ans
$ cat A/mypreciousfile.dat.ans
TRICKED
উভয় ওপর দিয়েই লিখতে তাই আপনি শুধু পরিচালিত থাকেন mypreciousfile.dat
এবং mypreciousfile.dat.ans
। যদি এই ফাইলগুলিতে কোনও সামগ্রী থাকে তবে তা মুছে ফেলা হবে।
২. ব্যবহার xargs
: সঠিক পদ্ধতিতে find
আপনি ব্যবহার পীড়াপীড়ি করতে চান তাহলে xargs
, ব্যবহার -0
(নাল-সমাপ্ত নাম):
find A/ -name "*.dat" -type f -print0 | xargs -0 -I file sh -c './a.out < "file" > "file.ans"'
দুটি বিষয় লক্ষ্য করুন:
- এইভাবে আপনি ফাইলগুলি তৈরি করে
.dat.ans
শেষ করবেন;
- এই ভঙ্গ করবে যদি কিছু ফাইলের নাম উদ্ধৃতি চিহ্ন রয়েছে (
"
)।
উভয় ইস্যু শেল আবেদনের বিভিন্ন উপায়ে সমাধান করা যেতে পারে:
find A/ -name "*.dat" -type f -print0 | xargs -0 -L 1 bash -c './a.out < "$0" > "${0%dat}ans"'
৩. সবই এর মধ্যে সম্পন্ন হয়েছে find ... -exec
find A/ -name "*.dat" -type f -exec sh -c './a.out < "{}" > "{}.ans"' \;
এটি আবার .dat.ans
ফাইল তৈরি করে এবং ফাইলের নাম থাকলে তা ভেঙে যায় "
। এটির জন্য, bash
এটি শুরু করার পদ্ধতিটি ব্যবহার করুন এবং পরিবর্তন করুন:
find A/ -name "*.dat" -type f -exec bash -c './a.out < "$0" > "${0%dat}ans"' {} \;