思路分析:
批量替换文件名,使用一个for循环依次遍历指定目录下的每个文件。
对于每个文件,假如该文件的名称为name.oldext,那么必须原始文件名中挖出name,再将它与新的文件扩展名newext拼接形成新的文件名name.newext。
例子:
复制代码 代码示例:
#!/bin/bash
oldext="JPG"
newext="jpg"
dir=$(eval pwd)
for file in $(ls $dir | grep .$oldext)
do
name=$(ls $file | cut -d. -f1)
mv $file ${name}.$newext
done
echo "change JPG=====>jpg done!"
说明:
1,变量oldext和newext分别指定旧的扩展名和新的扩展名。dir指定文件所在目录;
2,“ls $dir | grep .$oldext”用来在指定目录dir中获取扩展名为旧扩展名的所有文件;(脚本学堂 www.jb200.com 编辑整理)
3,在循环体内先利用cut命令将文件名中“.”之前的字符串剪切出来,并赋值给name变量;接着将当前的文件名重命名为新的文件名。
通过这个脚本,所有照片的扩展名都成功修改。
为了使此脚本更具有通用型,增加几条read命令实现脚本和用户之间的交互。
改进版的代码:
复制代码 代码示例:
#!/bin/bash
read -p "old extension:" oldext
read -p "new extension:" newext
read -p "The directory:" dir
cd $dir
for file in $(ls $dir | grep .$oldext)
do
name=$(ls $file | cut -d. -f1)
mv $file ${name}.$newext
echo "$name.$oldext ====> $name.$newext"
done
echo "all files has been modified."
例3,网友提供的批量修改文件后缀名的实例。
复制代码 代码示例:
#!/bin/sh
# file name : rename_suffix.sh
# author: zhouhh
# Email: ablozhou@gmail.com
echo "input what suffix will be replaced :"
read SUFFIX_SRC
echo "input what suffix of file to rename to:"
read SUFFIX_DST
for i in *.$SUFFIX_SRC
do
if [ -e $i ]; then
echo "mv $i to `basename $i .$SUFFIX_SRC`.$SUFFIX_DST"
mv $i `basename $i .$SUFFIX_SRC`.$SUFFIX_DST
else
echo "file does not exist."
exit -1
fi
done