প্রথমত, ফাইল তালিকা হিসাবে আউটপুট ব্যবহার করবেন না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"' {} \;