通常我们批量文件改名很容易想到
for i in `ls`;
do
mv "$old" "$new"
done
但是当文件名中包含了空的时候,默认以空格分隔,直接用上述方法就会有问题:
$ ls
'张学友 - 一千个伤心的理由11.flac' '张学友 - 分手总要在雨天11.flac'
OK,我们先打印出来看下
steven.wang@steven MINGW64 ~/Pictures/mp3/temp
$ for i in `ls`;do echo $i;echo "==========";done
张学友
==========
-
==========
一千个伤心的理由11.flac
==========
张学友
==========
.....
发现并非我们所想。所以我们必须解决默认空格的问题,不要使用ls,直接使用for file in ./temp/*; 利用basename以及管道组合获取后缀,然后根据替换新旧filename的编写脚本
for file in ./temp/*; do
if [[ -f $file ]]; then
extension=$(basename "$file" | grep -o '\.[^.]*$')
# 使用mv命令重命名文件,并替换文件名中的旧字符串
#mv "$file" "${file//'1.flac'/'1.flac'}"
mv "$file" "${file//$extension/'1'$extension}"
fi
done