怎样批量重命名文件(格式相同,但文件名序号不变)

2024年11月18日 08:51
有1个网友回答
网友(1):

#
# 本程序功能描述:
# 批量文件名重命名。
#
# 本程序的典型调用方法:
# ./BatchRename.sh absPath strOld strNew
#
# 其中:
# absPath 表示欲批量改名的文件所在文件夹的绝对路径
# strOld 表示文件名中要替换掉的字符串,可以是正则表达式
# strNew 表示文件名中要替换成的字符串,可以是正则表达式
#
# Version history:
# 2010-07-28 v1.2 Rewrite with shell parameters supporting.
# 2010-07-25 v1.0 Created by Yang Wang.
#

# For debugging purpose.
# echo $1
# echo $2
# echo $3

# 如果表示绝对路径的 $1 以 / 结尾,则去掉。再将去掉可能存在的 / 后的绝对路径赋给 absPath。
absPath=${1/%\//}

# For debugging purpose.
# echo $absPath
# exit 1

# 判断输入参数的个数是否正确
if [ $# != 3 ]; then
echo "USAGE: ./BatchRename.sh absPath strOld strNew"
echo " e.g.: G:/TrainingTools/SupportingTools/UsefulScripts/BatchRename.sh G:/Corpus/yyx/data_for_Nokia/labels_original/full/ male7000 male"
exit 1
fi

# 在循环中批量更改文件名,$i 是带有绝对路径的完整文件名。
for i in $absPath/`ls $absPath`; do

# echo $i
fileName=`basename $i`

echo "Renaming $fileName ..."
# echo $absPath/$fileName
# echo $absPath/`echo $fileName | sed "s/$2/$3/"`

mv $absPath/$fileName $absPath/`echo $fileName | sed "s/$2/$3/"`

done

echo "Done!"