使用大小写和递归重命名文件扩展名
问题描述:
有人可以创建一个短代码,使用命令行选项-r来重命名子目录中的文件扩展名吗?使用大小写和递归重命名文件扩展名
所以,如果我有一个名为loc的文件夹中的文件a.txt。我输入“change -r txt doc”,文件将成为loc子目录下的一个.doc文件(如loc/a.doc中)。
我需要将其添加到我的代码。另外我之所以要使用case语句是因为我将来会添加更多选项。
答
如果我正确理解您的问题,您想要递归更改文件扩展名。
脚本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
编辑响应您的评论。
答
要得到推广和使用case/esac
extension=${filename##*.}
case "$extension" in
"doc") ... ;;
"txt") ... ;;
esac
+0
有趣。感谢kurumi。 – JonSmith 2011-04-01 01:00:45
您是否尝试过?什么没有用?请提出具体问题。 – 2011-03-31 23:34:10
我只是不能这样做。我看了一个案例陈述的例子,我不知道如何将其应用于此。我试图将它添加到这一点:在* $ 为newext TXT 做 出口NAME ='基名$ newext $ .txt'做 – JonSmith 2011-03-31 23:39:44
MV $ NAME $ .TXT $ NAME $ 2.doc 似乎不可思议想要将.txt重命名为.doc。然后编写一个自定义脚本来执行'find ... -exec mv“{}”...'无论如何,可能值得注意的是,某些发行版有一个很好的重命名命令,用Perl正则表达式:'rename's /\.txt$/.doc/'* .txt' – mivk 2011-11-24 23:44:05