পটভূমি
আরজিবি থেকে গ্রেস্কেলতে চিত্র রূপান্তর করা হচ্ছে। বিভিন্ন ডিরেক্টরি বিভিন্ন ফাইল উপস্থিত। উদাহরণ স্বরূপ:
outline/trigon.png
outline/oval-bw.png
outline/crescent-bw.png
outline/trigon-bw.png
outline/crescent.png
outline/oval.png
সমস্যা
ফাইলগুলির একটি সেট (হাইফেন ব্যতীত) এর উপর ইটারেট করুন এবং ইতিমধ্যে রূপান্তরিত হওয়া ফাইলগুলি না রেখে গ্রেসকেলে রূপান্তর করুন। যে ফাইলগুলি ইতিমধ্যে রূপান্তরিত হয়েছে তাদের ফাইলের নাম শেষ হয় -bw.png
। স্ক্রিপ্ট -bw-bw.png
ফাইল তৈরি করা এড়ানো উচিত ।
সমাধান
নিম্নলিখিত লাইনটি কেবল রূপান্তরিত হয়নি এমন ফাইলগুলিতে পুনরাবৃত্তি করবে:
for i in $(find ./stripe/ ./outline ./solid -name "*.png" -exec echo {} \; | grep -v "-"); do
সম্পূর্ণ স্ক্রিপ্ট:
#!/bin/bash
# Avoid converting existing B&W files...
for i in $(find ./stripe/ ./outline ./solid -name "*.png" -exec echo {} \; | grep -v "-"); do
SHAPEDIR=$(dirname $i)
SHAPENAME=$(basename $i .png)
OUTPUTSHAPE=$SHAPEDIR/$SHAPENAME-bw.png
echo "convert $i to $OUTPUTSHAPE ..."
convert $i -density 600 -colorspace gray $OUTPUTSHAPE
done
প্রশ্ন
-bw
এর নামে হাইফেন (যেমন, ) রয়েছে এমন কোনও ফাইলকে উপেক্ষা করার সময় সমস্ত ফাইলকে পুনরুক্ত করার সহজ উপায় কী ? (ব্যবহার find
এবং echo
এবং grep
ভোঁতা মনে হয়।) এই একটি একাডেমিক প্রশ্ন হল, যেমন সমাধান কাজ করে।
png
, আমি এই এক পরিবর্তে সুপারিশ:for i in @(stripe|outline|solid)/@(!(*-bw).png); do
।