Calm Hill My Random Thoughts

Bash String Operators

ခရီးသွားနေရာကနေ ရုံးပြန်ရောက်လာတော့ Internal သုံးတဲ့ Image Search အတွက် ပုံတွေအများကြီး တင်စရာအလုပ်တစ်ခုက စောင့်နေပါတယ်။ ဓာတ်ပုံတွေက Filename တွေက Prefix အမျိုးမျိုးနဲ့ပေးထားပြီးတော့ Space မပါပဲ Underscore ခံရေးထားပြီး Image ID တစ်ခုနောက်ဆုံးက အဆုံးသတ်ပြီးတော့ Filename ပေးထားတယ်။ Image ID အပေါ်မူတည်ပြီးတော့မှ မူရင်း Website ကနေပြီးတော့ Data တွေကို Crawl လုပ်ဖို့ကလည်းရှိတော့ Filename တွေကနေ Image ID ကိုဖြတ်တောက်ပြီးတော့တော့ ယူရမှာပါပဲ အဲဒါနဲ့ Prefix အမျိုးမျိုးနဲ့ Filename ကိုလည်း Image ID ပဲပေးဖို့ဆုံးဖြတ်ရတယ်။ ရုံးကတစ်ယောက်က Program တစ်ခုရေးပြီးတော့ File တွေကို Rename လုပ်ရအောင်ဆိုတော့ Filename တွေဖြတ်တာနဲ့တော့ မလိုပါဘူးလို့ Bash Script ၃−၄ ကြောင်းဆိုရင် ရနိင်ပါတယ်ဆိုပြီး မသုံးသလောက်ဖြစ်နေတဲ့ String Operator ကိုပြန်ကြည့်ရတယ်။ Filename တွေက Underscore ခံရေးထားပြီး နောက်ဆုံးကနေ Image ID ပါတဲ့အတွက် တကယ်ကတော့ Program ရေးမယ်ဆိုလည်း Filename ကို Underscore နဲ့ Tokenized လုပ်လိုက်ပြီးတော့ နောက်ဆုံးအပိုင်းကို ယူလိုက်ရုံပါပဲ။ Schell Script ကိုသုံးရင်တော့ String Operator မှာ Left ကနေ Greedy နဲ့ နောက်ဆုံးက Underscore ကိုရှာလိုက်ရင်ရပါပြီ။ တကယ်တော့ Unix Schell တွေဟာ User တွေအတွက် အသုံးဝင်ပါတယ် တစ်ချိန်ကတော့ User နဲ့ Programmer ဟာ သိပ်မကွာခြားလှဘူး အဲဒီတော့ လိုအပ်လာရင် User တွေအနေနဲ့ Script တွေရဲ့ Concept ကိုနားလည်ကြသေးတယ် အခုအချိန်မှာတော့ ဒါတွေကမသုံးသလောက် ဖြစ်သွားပါပြီ။

Filename Example

Apple_187395.jpg
blue_sky_tree_297603.jpg
logo_vector_375982.eps

Bash Script

#!/bin/bash

for f in *.jpg *.eps
do
    echo $f to ${f##*_}
    mv $f ${f##*_}
done