bash: แปลงชื่อไฟล์เป็นตัวเล็ก

ต้องการแปลงชื่อไฟล์เป็นตัวเล็ก ค้นไปค้นมาปรากฎว่ามีอยู่ในแพกเกจ bash-doc เป็นตัวอย่างอยู่แล้ว

ต้องติดตั้งก่อน
$ sudo aptitude install bash-doc

ขมายมาใช้
$ sudo cp /usr/share/doc/bash-doc/examples/scripts.v2/lowercase /usr/local/bin
$ sudo chmod 755 /usr/local/bin/lowercase

เรียกใช้ด้วยคำสั่ง lowercase $FILENAME

นอกจากตัวอย่างในการแปลงไฟล์แล้ว ยังมีโปรแกรมอรรถประโยชน์อีกเยอะแยะในแพกเกจนี้ หากสนใจสามารถติดตั้งและศึกษาดูได้ครับ

ถ้าจะแปลงเป็นตัวใหญ่ก็แค่กลับ จาก tr A-Z a-z ไปเป็น tr a-z A-Z ก็เสร็จแล้ว
ทำเป็นตัวอย่างคือ
$ sudo vi /usr/local/bin/uppercase

#! /bin/bash
#
# original from
# @(#) lowercase.ksh 1.0 92/10/08
# 92/10/08 john h. dubois iii (john@armory.com)
#
# conversion to bash v2 syntax done by Chet Ramey

Usage="Usage: $name file ..."
phelp()
{
echo "$name: change filenames to upper case.
$Usage
Each file is moved to a name with the same directory component, if any,
and with a filename component that is the same as the original but with
any lower case letters changed to upper case."
}

name=${0##*/}

while getopts "h" opt; do
    case "$opt" in
    h)  phelp; exit 0;;
    *)  echo "$Usage" 1>&2; exit 2;;
    esac
done

shift $((OPTIND - 1))

for file; do
    filename=${file##*/}
    case "$file" in
    */*)    dirname=${file%/*} ;;
    *)    dirname=. ;;
    esac
    nf=$(echo $filename | tr a-z A-Z)
    newname="${dirname}/${nf}"
    if [ "$nf" != "$filename" ]; then
    mv "$file" "$newname"
    echo "$0: $file -> $newname"
    else
    echo "$0: $file not changed."
    fi
done

$ sudo chmod 755 /usr/local/bin/uppercase

เสร็จแล้ว เรียกใช้ด้วยคำสัง uppercase $FILENAME