很多人換大小寫會用程式語言來作,不過我覺得殺雞焉用牛刀,恰好也該開始練習shell script了!
#!/bin/bash
read -p "請輸入: 1.大轉小 2.小轉大 3.指定轉換副檔名: " choice
case "$choice" in
1) for file in *
do
lower=`echo "$file" | tr [:upper:] [:lower:]`
[ "$file" != "$lower" ] &&
mv "$file" "$lower"
done
echo "轉換完成!"
ls
exit 0
;;
2) for file in *
do
upper=`echo "$file" | tr [:lower:] [:upper:]`
[ "$file" != "$upper" ] &&
mv "$file" "$upper"
done
echo "轉換完成!"
ls
exit 1
;;
3) echo "輸入欲轉換副檔名:"
read subname
echo "輸入轉換後的副檔名:"
read newsubname
for file in *.$subname
do
mv "$file" "$(basename $file .$subname).$newsubname"
done
# basename的語法:
# basename /usr/bin/sort Output "sort".
# basename include/stdio.h .h Output "stdio".
echo "轉換完成!"
ls
exit 2
;;
*) echo "請輸入1或2。程式終止!"
;;
esac
exit 3
大家試試看吧@!
事實上,我比較喜歡用rename這個指令。利用rename的話,紅色的那行指令可以改寫成:
rename 's/$subname/$newsubname/' *.$subanme
不過,我手邊現有的機器只有debian跟opensuse 11.1,雖然兩者都有rename指令,不過rename對於opensuse卻沒有效果,也沒有錯誤訊息。查了一下rename是在util-linux套件裡,我也檢查了opensuse確實有安裝util-linux,但就是無效;因此我才選用紅色的code作為各版本通用的script。
OpenSuSE裡的rename用法,以此情況應該改成如下:
rename ".$subname" ".$newrename" *.subname
這實在是很不太妙,我竟然要去考慮不同linux間的相同指令的問題!目前只好用basename的的方法來做了!
沒有留言:
張貼留言