Bash Shell转换大小写,数码相机里全是一堆大写字母命名的文件,如 IMG0001.JPG
。你想将文件名改成小写,但又不愿意挨个重新输入。
解决方案
bash 4.0 中的几个运算符可以在引用变量名时转换其大小写。如果变量 $FN
中包含一个需要转换成小写的文件名(字符串),那么 ${FN,,}
会返回全部是小写形式的字符串。与此类似,${FN^^}
会返回全部是大写形式的字符串。甚至还有 ${FN~~}
,它可以切换大小写,将所有的小写字母转换成大写,大写字母转换成小写。
以下的 for 循环会将所有 .JPG
类型的文件名更改成小写字母。
for FN in *.JPG
do
mv "$FN" "${FN,,}"
done
或者写成单行脚本:
for FN in *.JPG; do mv "$FN" "${FN,,}" ; done
bash 4 或更高版本中还有另外一种方法:你可以将变量声明成始终为小写字母的类型。赋给该变量的任何文本都会转换成小写。要想在 for 循环中使用这种方法来重命名文件,使用简单的赋值即可,无须任何字符串操作。
declare -l lcfn # 变量内容会转换成小写字母
for FN in *.JPG
do
lcfn="$FN"
mv "$FN" "$lcfn"
done
还有一些类似的变量声明,它们可以更改所有字母或首字母的大小写。以下是一个简单的演示程序,其中展示了这类声明的用法。
declare -u UP # 全部大写
declare -l dn # 全部小写
declare -c Ca # 仅首字母大写
while read TXT
do
UP="${TXT}"
dn="${TXT}"
Ca="${TXT}"
echo $TXT $UP $dn $Ca
done
如果变量是通过 -c 声明的,即便字符串中包含多个单词,也只有首字母大写。你可以尝试运行并观察其如何工作。
酷客网相关文章:
评论前必须登录!
注册