一個關於linux與java的學習筆記,當然還有作者自己的心情紀錄。
最近用select寫了一個進階版的大小寫互換程式,供各位參考。
#!/bin/bash ## ----------------------------------------------------------------------- ## 2009.10.09 ## The "transCase.sh" is a powerful script to transform from uppercase to ## lowercase or vise versa, and verify sub filename as you wish. ## ## Author: Jim T. Tang(jtang@earth.sinica.edu.tw) ## ------------------------------------------------------------------------ echo "##############################################" echo "##transCase.sh能幫助你轉換大小寫以及副檔名!##" echo "##############################################" echo "##請注意:本程式因安全性考量,不會更改隱藏檔##" echo "## 以及所有連結檔。 ##" echo "## Author: ##" echo "## Jim T. Tang ##" echo "## (jtang@earth.sinica.edu.tw) ##" echo "##############################################" stringA="大寫轉小寫" stringB="小寫轉大寫" stringC="變更副檔名" PS3="請輸入選項:" select decision in $stringA $stringB $stringC do case $decision in ######################### ## 選擇1.大寫轉小寫字母## ######################### "$stringA") clear read -p "重新命名檔案(f) 資料夾(d) 或是兩者都要(b)?" choice case $choice in f|F) ##這個for迴圈僅秀出類別為file且有大寫部份的檔案 ##利用egrep -v去除隱藏檔 echo "即將轉換的檔案有:" for files in $(find . -maxdepth 1 -type f | egrep -v '\.\/\.') do if [ ! -L $files ];then lower=$(echo $files | tr '[:upper:]' '[:lower:]') [ $files != $lower ] && echo $files fi done ## 按下Y或y後就會真的進行轉換 read -p "確定要進行(Y/n)?" confirm case $confirm in y|Y|"") for files in $(find . -maxdepth 1 -type f | egrep -v '\.\/\.') do if [ ! -L $files ];then lower=$(echo $files | tr '[:upper:]' '[:lower:]') ## 把所有檔案都變成小寫,再跟原檔案比較; ## 若有不同表示含有大寫字元,會被轉換成小寫。 [ $files != $lower ] && mv -v $files $lower | tee -a /tmp/transCase.log fi done echo "轉換完成!" | tee -a /tmp/transCase.log break ;; *) echo "放棄轉換!" break ;; esac ;; d|D) ##這個for迴圈僅秀出類別為dir且有大寫部份的檔案 echo "即將轉換的資料夾有:" for files in $(find . -maxdepth 1 -type d | egrep -v '\.\/\.') do if [ ! -L $files ];then lower=$(echo $files | tr '[:upper:]' '[:lower:]') [ $files != $lower ] && echo $files fi done ## 按下Y或y後就會真的進行轉換 read -p "確定要進行(Y/n)?" confirm case $confirm in y|Y|"") for files in $(find . -maxdepth 1 -type d | egrep -v '\.\/\.') do if [ ! -L $files ];then lower=$(echo $files | tr '[:upper:]' '[:lower:]') [ $files != $lower ] && mv -v $files $lower | tee -a /tmp/transCase.log fi done echo "轉換完成!" | tee -a /tmp/transCase.log break ;; *) echo "放棄轉換!" break ;; esac ;; b|B) ##無論資料夾或是檔案,全都轉換! echo "即將轉換的檔案跟資料夾有:" for files in $(find . | egrep -v '\.\/\.') do if [ ! -L $files ];then lower=$(echo $files | tr '[:upper:]' '[:lower:]') [ $files != $lower ] && echo $files fi done ## 按下Y或y後就會真的進行轉換 read -p "確定要進行(Y/n)?" confirm case $confirm in y|Y|"") for files in $(find . | egrep -v '\.\/\.') do if [ ! -L $files ]; then lower=$(echo $files | tr '[:upper:]' '[:lower:]') [ $files != $lower ] && mv -v $files $lower | tee -a /tmp/transCase.log fi done echo "轉換完成!" | tee -a /tmp/transCase.log break ;; *) echo "放棄轉換!" break ;; esac ;; *) echo "請輸入f, d或b !" break 1 ;; esac ;; ######################## ##選擇2.小寫轉大寫字母## ######################## "$stringB") clear read -p "重新命名檔案(f) 資料夾(d) 或是兩者都要(b)?" choice case $choice in f|F) ##這個for迴圈僅秀出類別為file且有小寫部份的檔案 echo "即將轉換的檔案有:" for files in $(find . -maxdepth 1 -type f | egrep -v '\.\/\.') do if [ ! -L $files ];then upper=$(echo $files | tr '[:lower:]' '[:upper:]') [ $files != $upper ] && echo $files fi done ## 按下Y或y後就會真的進行轉換 read -p "確定要進行(Y/n)?" confirm case $confirm in y|Y|"") for files in $(find . -maxdepth 1 -type f | egrep -v '\.\/\.') do if [ ! -L $files ];then upper=$(echo $files | tr '[:lower:]' '[:upper:]') [ $files != $upper ] && mv -v $files $upper | tee -a /tmp/transCase.log fi done echo "轉換完成!" | tee -a /tmp/transCase.log break ;; *) echo "放棄轉換!" break ;; esac ;; d|D) ##這個for迴圈僅秀出類別為dir且有小寫部份的檔案 echo "即將轉換的資料夾有:" for files in $(find . -maxdepth 1 -type d | egrep -v '\.\/\.') do if [ ! -L $files ];then upper=$(echo $files | tr '[:lower:]' '[:upper:]') [ $files != $upper ] && echo $files fi done ## 按下Y或y後就會真的進行轉換 read -p "確定要進行(Y/n)?" confirm case $confirm in y|Y|"") for files in $(find . -maxdepth 1 -type d | egrep -v '\.\/\.') do if [ ! -L $files ];then upper=$(echo $files | tr '[:lower:]' '[:upper:]') [ $files != $upper ] && mv -v $files $upper | tee -a /tmp/transCase.log fi done echo "轉換完成!" | tee -a /tmp/transCase.log break ;; *) echo "放棄轉換!" break ;; esac ;; b|B) ##無論資料夾或是檔案,全都轉換! echo "即將轉換的檔案跟資料夾有:" for files in $(find . | egrep -v '\.\/\.') do if [ ! -L $files ]; then upper=$(echo $files | tr '[:lower:]' '[:upper:]') [ $files != $upper ] && echo $files fi done ## 按下Y或y後就會真的進行轉換 read -p "確定要進行(Y/n)?" confirm case $confirm in y|Y|"") for files in $(find . | egrep -v '\.\/\.') do if [ ! -L $files ]; then upper=$(echo $files | tr '[:lower:]' '[:upper:]') [ $files != $upper ] && mv -v $files $upper | tee -a /tmp/transCase.log fi done echo "轉換完成!" | tee -a /tmp/transCase.log break ;; *) echo "放棄轉換!" break ;; esac ;; *) echo "請輸入f, d或b !" break 1 ;; esac ;; ######################## ## 選擇3.更改副檔名 #### ######################## "$stringC") clear echo "------<使用範例>---------" echo "請輸入既有的副檔名: jpg" echo "請輸入欲轉換的副檔名:jPeG" echo "'foo.jpg --> foo.jPeG'" echo -e "------<範例結束>---------\n\n" read -p "請輸入既有的副檔名: " subname read -p "請輸入欲轉換的副檔名: " newSubname echo "會被轉換的檔案有:" for files in *.$subname do echo $files done read -p "確定進行轉換?(Y/n)" choice case $choice in ""|Y|y) for files in *.$subname do mv -v "$files" "$(basename $files .$subname).$newSubname" | tee -a /tmp/transCase.log done echo "轉換完成!" | tee -a /tmp/transCase.log break ;; *) echo "放棄轉換." break ;; esac ;; esac done unset PS3 exit 0
張貼留言
沒有留言:
張貼留言