হাইফেনের সাহায্যে ফাইলের নাম উপেক্ষা করে ফাইলগুলির ওপরে ইটারেট করুন


0

পটভূমি

আরজিবি থেকে গ্রেস্কেলতে চিত্র রূপান্তর করা হচ্ছে। বিভিন্ন ডিরেক্টরি বিভিন্ন ফাইল উপস্থিত। উদাহরণ স্বরূপ:

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ভোঁতা মনে হয়।) এই একটি একাডেমিক প্রশ্ন হল, যেমন সমাধান কাজ করে।

উত্তর:


1

বাশ বর্ধিত গ্লোববিং নিদর্শন সহ:

$ shopt -s extglob
$ echo outline/!(*-*)
outline/crescent.png outline/oval.png outline/trigon.png

1
যেহেতু যে প্যাটার্ন একা অন্যান্য বিষয়ের বাদে মেলে দিবে png, আমি এই এক পরিবর্তে সুপারিশ: for i in @(stripe|outline|solid)/@(!(*-bw).png); do
নিউটিটিক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.