使用大小写和递归重命名文件扩展名

时间:2011-03-31 23:32:55

标签: bash

有人可以创建一个短代码,使用命令行选项-r重命名子目录中的文件扩展名吗?

所以如果我在名为loc的文件夹中有一个文件a.txt。我输入这个“change -r txt doc”,该文件将成为loc子目录中的a.doc(如loc / a.doc中所示)。

我需要将其添加到我的代码中。我之所以要使用case语句,也是因为我将来会添加更多选项。

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您希望以递归方式更改文件扩展名。

脚本change.sh

# recursive rename:       ./change.sh -r -f txt -t doc
# current directory only: ./change.sh -f txt -t doc

find_depth="-maxdepth 1"    # defaults to current directory

while getopts "rf:t:" Option
do
case $Option in
    f ) from=$OPTARG ;;
    t ) to=$OPTARG ;;
    r ) find_depth="" ;;
esac
done
shift $(($OPTIND - 1)) 

for file in $(find . $find_depth -name "*.$from")
do 
    mv $file "${file/.$from/.$to}"
done

根据您的评论进行编辑。

答案 1 :(得分:1)

要获得扩展程序并使用case/esac

extension=${filename##*.}
case "$extension" in
  "doc" ) ... ;;
  "txt" ) ... ;;
esac